如何在ASP.NET MVC中生成控制器之外的URL?

时间:2011-02-05 15:01:23

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

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

5 个答案:

答案 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