ASP.NET MVC - 如何获取动作的完整路径

时间:2011-07-21 22:02:06

标签: asp.net-mvc asp.net-mvc-routing

在视图内部,我可以获取动作的完整路线信息吗?

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

3 个答案:

答案 0 :(得分:77)

你的意思是在Url帮助器上使用Action方法:

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

或在Razor中:

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

将为您提供相对网址(/MyController/DoThis)。

如果您想获得绝对网址(http://localhost:8385/MyController/DoThis):

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

答案 1 :(得分:9)

前几天,我写了一篇关于这个话题的博客文章(见How to build absolute action URLs using the UrlHelper class)。正如Darin Dimitrov所说:如果明确指定了UrlHelper.Action参数,protocol将生成绝对URL。

但是,为了便于阅读,我建议编写一个自定义扩展方法:

/// <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")

答案 2 :(得分:1)

您可以使用Url.Action方法,只需传入控制器的名称和所需的操作,它就会为您生成适当的URL,例如

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