当前位置:  开发笔记 > 后端 > 正文

在控制器.NET MVC中创建URL

如何解决《在控制器.NETMVC中创建URL》经验,为你挑选了4个好方法。

我需要能够在控制器上的Action中构建一个链接来发送电子邮件.这样做的最佳做法是什么?我不希望自己构建它,以防我的路线发生变化.

我是否应该查看每封电子邮件并进行呈现并发送?这可能是一种很好的方式.



1> Gidon..:

如果您只想获得某个操作的路径,请使用UrlHelper:

UrlHelper u = new UrlHelper(this.ControllerContext.RequestContext);
string url = u.Action("About", "Home", null);

如果要创建超链接:

string link = HtmlHelper.GenerateLink(this.ControllerContext.RequestContext, System.Web.Routing.RouteTable.Routes, "My link", "Root", "About", "Home", null, null);

Intellisense将为您提供每个参数的含义.


从评论更新:控制器已经有一个UrlHelper:

string url = this.Url.Action("About", "Home", null); 


后续:对于倒数第二个参数(RouteValueDictionary),这里有一个例子:new System.Web.Routing.RouteValueDictionary(new {id = 1})
您不需要构建新的UrlHelper; 控制器上有一个.Url属性,它将为您提供一个具有正确RequestContext的属性.
您无需新建UrlHelper,只需访问Controller类中的Url属性即可.

2> 小智..:

如果您需要完整的URL(例如通过电子邮件发送),请考虑使用以下内置方法之一:

有了这个你修复de route用于build de url:

Url.RouteUrl("OpinionByCompany", new RouteValueDictionary(new{cid=newop.CompanyID,oid=newop.ID}), HttpContext.Request.Url.Scheme, HttpContext.Request.Url.Authority)

这里的url是在路由引擎确定de correct之后构建的:

Url.Action("Detail","Opinion",new RouteValueDictionary(new{cid=newop.CompanyID,oid=newop.ID}),HttpContext.Request.Url.Scheme, HttpContext.Request.Url.Authority)

在这两种方法中,最后2个参数指定协议和主机名.

问候.


使用`Url.Action(action,controller,routevalue,protocol)`的FYI也会生成完整的URL,因此如果您不需要,则不必指定主机名.

3> Moshe..:

我有同样的问题,看来Gidon的答案有一个小缺陷:它产生一个相对的URL,不能通过邮件发送.

我的解决方案如下所示:

string link = HttpContext.Request.Url.Scheme + "://" + HttpContext.Request.Url.Authority + Url.Action("ResetPassword", "Account", new { key = randomString });

这样,生成了一个完整的URL,即使应用程序在托管服务器上有多个级别,并且使用80以外的端口,它也能正常工作.

编辑:我发现这也很有用.



4> Sphinxxx..:

另一种为操作创建绝对URL的方法:

var relativeUrl = Url.Action("MyAction");  //..or one of the other .Action() overloads
var currentUrl = Request.Url;

var absoluteUrl = new System.Uri(currentUrl, relativeUrl);

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有