如何从控制器外部的辅助方法生成指向控制器操作的URL?
答案 0 :(得分:73)
如果您有权访问HttpContext
:
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
答案 1 :(得分:2)
使用L01NL的答案,可能需要注意的是,如果提供了一个,Action方法也将获得当前参数。 E.g:
编辑id = 100的项目
网址为http://hostname/Project/Edit/100
urlHelper.Action("Edit", "Project")
返回http://hostname/Project/Edit/100
urlHelper.Action("Edit", "Project", new { id = (int?) null });
返回http://hostname/Project/Edit
答案 2 :(得分:1)
由于您可能希望在View中使用该方法,因此应使用视图的Url
属性。它的类型为UrlHelper
,允许您执行
<%: Url.Action("TheAction", "TheController") %>
如果您想在视图中避免使用这种字符串引用,可以在UrlHelper
上编写为您创建的扩展方法:
public static class UrlHelperExtensions
{
public static string UrlToTheControllerAction(this UrlHelper helper)
{
return helper.Action("TheAction", "TheController");
}
}
会像这样使用:
<%: Url.UrlToTheControllerTheAction() %>
答案 3 :(得分:0)
将UrlHelper传递给您的帮助程序功能,然后您可以执行以下操作:
public SomeReturnType MyHelper(UrlHelper url, // your other parameters)
{
// Your other code
var myUrl = url.Action("action", "controller");
// code that consumes your url
}
答案 4 :(得分:0)
您可以使用LinkGenerator。它是Microsoft.AspNetCore.Routing命名空间的新功能,并已于2020年8月添加。
首先,您必须将其插入课堂:
public class Sampleervice
{
private readonly LinkGenerator _linkGenerator;
public Sampleervice (LinkGenerator linkGenerator)
{
_linkGenerator = linkGenerator;
}
public string GenerateLink()
{
return _linkGenerator.GetPathByAction("Privacy", "Home");
}
}
有关更多信息,请检查this