【问题标题】:How do I generate a URL outside of a controller in ASP.NET MVC?如何在 ASP.NET MVC 中的控制器之外生成 URL?
【发布时间】:2011-02-05 15:01:23
【问题描述】:

如何从控制器外部的辅助方法生成指向控制器操作的 URL?

【问题讨论】:

标签: c# asp.net-mvc asp.net-mvc-3 controller html-helper


【解决方案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 属性。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-27
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 2019-09-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多