Какой предпочтительный способ получить полный путь к серверу в представлении ASP.NET MVC? - PullRequest
8 голосов
/ 07 декабря 2008

Я новичок в ASP.NET MVC и пытаюсь получить полный URL-адрес действия при работе в представлении. Мне нужно это для передачи стороннему API в качестве обратного вызова. Например, что мне нужно, это

http://myserver.com/controller/action

Когда я использую

<%= Url.Action("action", "controller") %>

Я получаю

/ контроллер / действие

Я знаю несколько способов добавить базовый путь к серверу, но мне интересно, какой предпочтительный способ сделать это в представлении ASP.NET MVC?

РЕДАКТИРОВАТЬ: просто чтобы уточнить, это не URL для текущего представления / действия, это для другого действия в том же контроллере.

Ответы [ 4 ]

20 голосов
/ 07 декабря 2008

Чтобы поймать изменения в протоколе (http / https), различных портах и ​​виртуальных путях (не всегда можно предположить, что мы будем в корневом каталоге сервера), я выбрал следующее решение:

<%= Request.Url.GetLeftPart(System.UriPartial.Authority) + Url.Action("action", "controller")%>

Я работаю над переносом этого метода расширения, чтобы сделать его красивее.

3 голосов
/ 07 декабря 2008

Редактировать: для любой комбинации вида / контроллера не уверен, что вы найдете что-то более простое, чем это.

http://<%=Request.Url.Host %><%=Url.Action("action", "controller")%>
2 голосов
/ 22 июля 2011

Я написал сообщение в блоге, посвященное генерации полного пути, под названием Как создать URL-адреса абсолютных действий с помощью класса UrlHelper . Вы определенно хотели бы проверить это!


Вот расширение, которое я предлагаю написать:

/// <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);
}
0 голосов
/ 09 ноября 2011

Request.Url возвращает полный URL, включая протокол (http://), URL (www.mydomain.com/mypath) и строку запроса (? Id = 5).

@Request.Url       @*Razor tags*@

Для классических тегов ASP.NET MVC это будет

<%=Request.Url%>   <%'Classic tags%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...