Answers:
如果您只想获取特定操作的路径,请使用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);
如果您需要完整的URL(例如,通过电子邮件发送),请考虑使用以下内置方法之一:
这样,您可以创建用于构建网址的路由:
Url.RouteUrl("OpinionByCompany", new RouteValueDictionary(new{cid=newop.CompanyID,oid=newop.ID}), HttpContext.Request.Url.Scheme, HttpContext.Request.Url.Authority)
此处是在路由引擎确定正确的URL之后构建的url:
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)
还会产生完整的URL,因此不需要时无需指定主机名。
我遇到了同样的问题,看来Gidon的答案有一个小缺陷:它生成一个相对URL,该URL无法通过邮件发送。
我的解决方案如下所示:
string link = HttpContext.Request.Url.Scheme + "://" + HttpContext.Request.Url.Authority + Url.Action("ResetPassword", "Account", new { key = randomString });
这样,将生成完整的URL,即使应用程序在托管服务器上位于多个级别,并且使用的端口不是80,它也可以工作。
编辑:我发现这也有用。