2008-12-06 12 views
8

Soy nuevo en ASP.NET MVC y estoy tratando de obtener la URL completa de una acción cuando se trabaja en una vista. Necesito que esto se envíe a una API de terceros como devolución de llamada. Por ejemplo lo que necesito es¿Cuál es la forma preferida de obtener la ruta completa del servidor en una vista ASP.NET MVC?

http://myserver.com/controller/action

Cuando uso

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

me sale

/controlador/acción

Conozco varias formas de agregar la ruta base del servidor a esto, pero me pregunto cuál es la forma preferida de hacerlo en la vista ASP.NET MVC.

EDITAR: Solo para aclarar, no es la URL de la vista/acción actual, es para otra acción en el mismo controlador.

Respuesta

20

Con el fin de captar las variaciones en el protocolo (HTTP/HTTPS), puertos diffrent y caminos virtuales (no siempre puede asumir vamos a estar en la raíz del servidor) que terminó con la siguiente solución:

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

Estoy trabajando en mover esto a un método de extensión para hacerlo más bonito.

3

Editar: para cualquier combinación de vista/controlador, no estoy seguro de que encontrará algo más simple que esto.

http://<%=Request.Url.Host %><%=Url.Action("action", "controller")%> 
+0

'@ Url.Action ("Acción", "controlador", null, "http")' sería más concisa .. –

2

Escribí una publicación de blog relacionada con la generación de ruta completa llamada How to build absolute action URLs using the UrlHelper class. ¡Definitivamente querrías comprobarlo!


Aquí está la extensión sugiero escribir:

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

El enlace a su contenido aquí está muerto. En lugar de vincular a las publicaciones de blog, publique la respuesta real. –

+0

@JohnBoker Lo siento, recientemente rompí las reglas de redirección. He actualizado mi respuesta en consecuencia. –

0

Request.Url devuelve la URL completa, incluyendo el protocolo (http: //), la url (www.mydomain.com/mypath) y la cadena de consulta (? id = 5).

@Request.Url  @*Razor tags*@ 

Para las etiquetas clásicas ASP.NET MVC sería

<%=Request.Url%> <%'Classic tags%> 
Cuestiones relacionadas