Creating a URL in the controller .NET MVC
我需要能够在控制器的操作中构造一个链接来发送电子邮件。最佳实践是什么?我不想自己建造它以防我的路线改变。
我应该为每封电子邮件都有一个视图,并将其呈现并发送吗?这可能是一个很好的方法。
如果您只想获得某个操作的路径,请使用
1 2 | UrlHelper u = new UrlHelper(this.ControllerContext.RequestContext); string url = u.Action("About","Home", null); |
如果要创建超链接:
1 | string link = HtmlHelper.GenerateLink(this.ControllerContext.RequestContext, System.Web.Routing.RouteTable.Routes,"My link","Root","About","Home", null, null); |
IntelliSense将为您提供每个参数的含义。
从注释更新:控制器已经有一个
1 | string url = this.Url.Action("About","Home", null); |
如果您需要完整的URL(例如通过电子邮件发送),请考虑使用以下内置方法之一:
使用此选项,可以修复用于构建de url的de route:
1 | Url.RouteUrl("OpinionByCompany", new RouteValueDictionary(new{cid=newop.CompanyID,oid=newop.ID}), HttpContext.Request.Url.Scheme, HttpContext.Request.Url.Authority) |
在这里,URL是在路由引擎确定错误后生成的:
1 | Url.Action("Detail","Opinion",new RouteValueDictionary(new{cid=newop.CompanyID,oid=newop.ID}),HttpContext.Request.Url.Scheme, HttpContext.Request.Url.Authority) |
在这两种方法中,最后两个参数指定协议和主机名。
当做。
我也有同样的问题,似乎Gidon的回答有一个小小的缺陷:它生成了一个相对的URL,不能通过邮件发送。
我的解决方案如下:
1 | string link = HttpContext.Request.Url.Scheme +"://" + HttpContext.Request.Url.Authority + Url.Action("ResetPassword","Account", new { key = randomString }); |
这样就生成了一个完整的URL,即使应用程序在宿主服务器上有多个层次,并且使用的端口不是80,它也可以工作。
编辑:我发现这个也很有用。
创建操作绝对URL的另一种方法:
1 2 3 4 | 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核心中执行相同的操作,下面介绍如何在操作中创建urlhelper:
1 | var urlHelper = new UrlHelper(this.ControllerContext); |
或者,如果您继承了