在控制器.NET MVC中创build一个URL

我需要能够在控制器的Action上构build一个链接来发送电子邮件。 什么是最好的做法呢? 如果我的路线改变,我不想自己构build它。

我应该有每个电子邮件的视图和呈现,并发送它? 这可能是一个很好的做法。

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

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

如果你想创build一个超链接:

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

智能感知会给你每个参数的含义。


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

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

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

有了这个,你修复了path使用的构buildde url:

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

这里的url是在路由引擎确定正确的之后build立的:

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

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

问候。

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

我的解决scheme如下所示:

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

这样,就会生成完整的URL,即使应用程序在宿主服务器上有几个级别的深度,并且使用80以外的端口,它也能正常工作。

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

另一种创build绝对URL的方法:

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

我知道这是一个古老的问题,但万一你正在尝试在ASP.NET Core中做同样的事情,下面是如何在一个操作中创buildUrlHelper:

 var urlHelper = new UrlHelper(this.ControllerContext); 

或者,如果从Controllerinheritance,则可以使用Controller.Url属性。