2011-08-17 12 views
21

EscribirURL para URL completa en asp.net mvc-3

@Url.Content("~/Something/Something.html") 

la afeitadora en renders

/AppFolder/Something/Something.html 

¿Hay una manera de hacer que la URL completa como http://www.something.com/AppFolder/Something/Something.html sin cortes atroces? (como almacenar el protocolo y el dominio en el AppConfig, y concatenar la cadena al mismo)

¿Hay un ayudante como @Url.FullPath("~/asdf/asdf") o similar?

+1

¿Ha encontrado una respuesta para esto? ¡Estoy buscando lo mismo! Cualquier ayuda apreciada. – ETFairfax

+0

¿Alguna sugerencia para usar Url.Action en Mono? http://stackoverflow.com/questions/30497900/how-to-use-url-action-in-mono – xameeramir

Respuesta

22

El @ Url.RouteURL() no responde silenciosamente a esta pregunta. Funciona para rutas con nombre, pero se queda corto para rutas virtuales arbitrarias. Aquí está el método de ayuda rápida que genera la url de salida completa. Puede crear sobrecargas para varios esquemas (http [s]) dependiendo del grado de control deseado.

public static class UrlHelperExtension 
{ 
    public static string ContentFullPath(this UrlHelper url,string virtualPath) 
    { 
     var result = string.Empty; 
     Uri requestUrl = url.RequestContext.HttpContext.Request.Url; 

     result = string.Format("{0}://{1}{2}", 
           requestUrl.Scheme, 
           requestUrl.Authority, 
           VirtualPathUtility.ToAbsolute(virtualPath)); 
     return result; 
    } 
} 
+0

¡Esa era una vieja pregunta! Puede obtener una insignia para esto: D – SoonDead

24

Ver this blog post para la respuesta.

Básicamente, todo lo que necesita hacer es incluir el parámetro de protocolo, p.

Url.Action("About", "Home", null, "http") 
+9

Url.Content! = Url.Action – SoonDead

+0

eres mi héroe ..... :) – Tom

+0

Este es un mejor respuesta que usar 'String.Format'. +1 – Yuck

0

para cualquiera que necesite para construir URLs en WebAPI 2.2 y/o MVC5, esto funcionó para mí:

// works in a controller 
var requestUri = this.Request.RequestUri; 
// just the http/s and the hostname; ymmv 
string baseUrl = requestUri.Scheme + "://" + requestUri.Authority + "/"; 
// build your url for whatever purpose you need it for 
string url = baseUrl + "SomeOtherController?id=" + <some_magic_value>;