2010-01-15 43 views
28

Quiero generar una URL completa (con nombre de dominio, etc.) de cualquier archivo en MVC. Ejemplo: un archivo .jpg o un archivo exe.Obtener la URL completa de cualquier archivo en ASP.Net MVC

Ejemplo: Si reparto "~/images/abc.jpg" debe volver "http://www.mywebsite.com/images/abc.jpg"

Soy consciente de la sobrecarga Url.Action que toma el protocolo como un parámetro. Pero Url.Action se puede usar solo para Acciones.

Quiero algo así como la función Url.Content que toma el protocolo como parámetro.

¿Sabe si hay algún método para obtener la URL completa de cualquier archivo?

He intentado: VirtualPathUtility.ToAbsolute, ResolveClientUrl, ResolveUrl pero todos estos no parecen funcionar.

Respuesta

46

Puede utilizar el siguiente código para reemplazar "~ /" para suprimir URL.

System.Web.VirtualPathUtility.ToAbsolute("~/") 

Editar:

En primer lugar es necesario definir un método.

public static string ResolveServerUrl(string serverUrl, bool forceHttps) 
{ 
    if (serverUrl.IndexOf("://") > -1) 
     return serverUrl; 

    string newUrl = serverUrl; 
    Uri originalUri = System.Web.HttpContext.Current.Request.Url; 
    newUrl = (forceHttps ? "https" : originalUri.Scheme) + 
     "://" + originalUri.Authority + newUrl; 
    return newUrl; 
} 

Ahora, llamar a este método devolverá la url completa de absolure.

ResolveServerUrl(VirtualPathUtility.ToAbsolute("~/images/image1.gif"),false)) 

La salida será http://www.yourdomainname.com/images/image1.gif

+2

el código anterior devuelve "/". Eso es. No el nombre de dominio con protocolo como http: // www.mywebsite/ –

+0

he actualizado la respuesta. ahora cumplirá con el requisito – Adeel

+0

Sí, gracias. Referencia: http://www.west-wind.com/Weblog/posts/154812.aspx –

-6

Probar Usar este.

Url.Action("~/images/image1.gif", "/", null, Request.Url.Scheme) 
+2

OP habló de los problemas asociados con esta solución exacta. La respuesta correcta a esta pregunta se dio 2 horas después de que se hizo la pregunta hace 3 años ... – OGHaza

56
new Uri(Request.Url, Url.Content("~/images/image1.gif")) 
+1

No estoy seguro de cuál es la manera más eficiente, pero me parece el método más fácil de usar y recordar. –

+3

¡esta debería ser la respuesta! es simple y está hecho por defecto por NET, por lo que es lo mejor en flexibilidad y facilidad de mantenimiento –

+0

Es hermoso, pero no funcionó para mí .. Todavía me sale algo así como 'main/images/load.png' que falta el dominio. – fiberOptics

Cuestiones relacionadas