【发布时间】:2011-02-05 15:01:23
【问题描述】:
如何从控制器外部的辅助方法生成指向控制器操作的 URL?
【问题讨论】:
-
我假设您也不是在谈论 View 的 UrlHelper?
-
没有一个答案是真正的答案。
标签: c# asp.net-mvc asp.net-mvc-3 controller html-helper
如何从控制器外部的辅助方法生成指向控制器操作的 URL?
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-3 controller html-helper
如果您可以访问HttpContext,则可以使用以下内容:
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
【讨论】:
builder.Register(context => new UrlHelper(context.Resolve<RequestContext>())).InstancePerRequest();
System.Web.Mvc命名空间而不是System.Web.Http.Routing,因为这个类存在于这两个命名空间中
您可以使用 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
【讨论】:
使用 L01NL 的答案,可能需要注意的是,如果提供了一个,Action 方法也将获取当前参数。例如:
编辑 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
【讨论】:
由于您可能想在视图中使用该方法,您应该使用视图的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() %>
【讨论】:
将 UrlHelper 传递给您的辅助函数,然后您可以执行以下操作:
public SomeReturnType MyHelper(UrlHelper url, // your other parameters)
{
// Your other code
var myUrl = url.Action("action", "controller");
// code that consumes your url
}
【讨论】: