ASP.NET MVC – 如何获得一个行动的完整path

在视图的内部,我可以得到一个完整的路线信息的行动?

如果我在控制器MyController中有一个名为DoThis的动作。 我可以到"/MyController/DoThis/"的path吗?

你的意思是像在Url助手上使用Action方法:

 <%= Url.Action("DoThis", "MyController") %> 

或在剃刀:

 @Url.Action("DoThis", "MyController") 

这将给你一个相对的url( /MyController/DoThis )。

如果你想得到一个绝对的URL( http://localhost:8385/MyController/DoThis ):

 <%= Url.Action("DoThis", "MyController", null, Request.Url.Scheme, null) %> 

几天前,我写了一篇关于该主题的博客文章(请参阅如何使用UrlHelper类构build绝对操作URL )。 正如达林·季米特洛夫所说: UrlHelper.Action将生成绝对URL,如果protocol参数是明确指定的。

不过,为了可读性,我build议编写一个自定义的扩展方法:

 /// <summary> /// Generates a fully qualified URL to an action method by using /// the specified action name, controller name and route values. /// </summary> /// <param name="url">The URL helper.</param> /// <param name="actionName">The name of the action method.</param> /// <param name="controllerName">The name of the controller.</param> /// <param name="routeValues">The route values.</param> /// <returns>The absolute URL.</returns> public static string AbsoluteAction(this UrlHelper url, string actionName, string controllerName, object routeValues = null) { string scheme = url.RequestContext.HttpContext.Request.Url.Scheme; return url.Action(actionName, controllerName, routeValues, scheme); } 

该方法可以这样调用: @Url.AbsoluteAction("SomeAction", "SomeController")

您可以使用Url.Action方法,您可以在其中传递控制器的名称和所需的操作,并为您生成适当的URL

 Url.Action("MyController", "DoThis")