ASP.NET MVC - как получить полный путь к действию - PullRequest
35 голосов
/ 22 июля 2011

Внутри вида я могу получить полную информацию о маршруте к действию?

Если у меня есть действие под названием DoThis в контроллере MyController.Могу ли я добраться до пути "/MyController/DoThis/"?

Ответы [ 3 ]

77 голосов
/ 22 июля 2011

Вы имеете в виду использование метода Действие в помощнике по URL:

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

или в Razor:

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

, который даст вам относительный URL(/MyController/DoThis).

А если вы хотите получить абсолютный URL (http://localhost:8385/MyController/DoThis):

<%= Url.Action("DoThis", "MyController", null, Request.Url.Scheme, null) %>
9 голосов
/ 22 июля 2011

Несколько дней назад я написал пост в блоге на эту тему (см. Как создать URL-адреса абсолютных действий с использованием класса UrlHelper ).Как отметил Дарин Димитров: UrlHelper.Action будет генерировать абсолютные URL, если явно указан параметр protocol.

Однако я предлагаю написать собственный метод расширения для удобства чтения:

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

1 голос
/ 22 июля 2011

Вы можете использовать метод Url.Action , в котором вы можете просто указать имя контроллера и желаемое действие, и он сгенерирует соответствующий URL-адрес для вас, например,

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