如何在 ASP.NET MVC 中的控制器之外生成 URL?
Posted
技术标签:
【中文标题】如何在 ASP.NET MVC 中的控制器之外生成 URL?【英文标题】:How do I generate a URL outside of a controller in ASP.NET MVC? 【发布时间】:2011-02-05 15:01:23 【问题描述】:如何从控制器外部的辅助方法生成指向控制器操作的 URL?
【问题讨论】:
ASP.NET MVC - Accessing Url.GenerateUrl from Outside the Controller 的可能重复项 我假设您也不是在谈论 View 的 UrlHelper? 没有一个答案是真正的答案。 【参考方案1】:如果您可以访问HttpContext
,则可以使用以下内容:
var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
【讨论】:
这应该是正确的答案。只是将对象传递给方法(当前正确答案)有点太明显了,并且不是 UrlHelper 特定的。 能够通过注入(Autofac)提供以下行;builder.Register(context => new UrlHelper(context.Resolve<RequestContext>())).InstancePerRequest();
值得一提的是使用System.Web.Mvc
命名空间而不是System.Web.Http.Routing
,因为这个类存在于这两个命名空间中【参考方案2】:
您可以使用 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
【讨论】:
【参考方案3】:使用 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
【讨论】:
【参考方案4】:由于您可能想在视图中使用该方法,您应该使用视图的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() %>
【讨论】:
【参考方案5】:将 UrlHelper 传递给您的辅助函数,然后您可以执行以下操作:
public SomeReturnType MyHelper(UrlHelper url, // your other parameters)
// Your other code
var myUrl = url.Action("action", "controller");
// code that consumes your url
【讨论】:
嗯,如果你已经有了UrlHelper,为什么还要调用这个方法呢? @hunter:OP 有一个助手,他需要那个助手中的 url,我建议将 UrlHelper 传递给他的助手以生成他想要的 url。我编辑了我的答案,以更清楚地说明我要提出的建议。 我不能从静态类或 asp.net mvc 中内置的东西访问 UrlHelper 吗?不通过 UrlHelper。 对实现没有用处,例如,模型类中的只读 Url 属性。以上是关于如何在 ASP.NET MVC 中的控制器之外生成 URL?的主要内容,如果未能解决你的问题,请参考以下文章
asp.net 5 MVC6 中标签助手和路由属性之间的奇怪行为
了解 ASP.NET(MVC、Web API)中的令牌生成/验证
在 sql asp.net mvc 5 中使用 linq 时如何格式化记录中的数据?
ASP.Net MVC 中的简单 Dropzone 实现 - 如何在控制器中获取数据?