2011-08-17 22 views
21

scritturaURL per URL completo in asp.net MVC-3

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

nel rasoio rende

/AppFolder/Something/Something.html 

C'è un modo per rendere l'URL completo come http://www.something.com/AppFolder/Something/Something.html senza hack atroci? (come la memorizzazione del protocollo e del dominio nel AppConfig e concatenare la stringa ad esso)

Esiste un helper come @Url.FullPath("~/asdf/asdf") o simile?

+1

Hai trovato una risposta per questo? Sto cercando la stessa cosa! Qualsiasi aiuto apprezzato. – ETFairfax

+0

Qualche suggerimento per usare Url.Azione in Mono? http://stackoverflow.com/questions/30497900/how-to-use-url-action-in-mono – xameeramir

risposta

22

@ Url.RouteURL() non risponde a questa domanda. Funziona per le rotte denominate ma non è sufficiente per percorsi virtuali arbitrari. Ecco il metodo di supporto rapido che genera l'URL completo in uscita. È possibile creare sovraccarichi per vari schemi (http [s]) a seconda del grado di controllo desiderato.

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

Era una vecchia domanda! Si potrebbe ottenere un distintivo per questo: D – SoonDead

24

Vedere this blog post per la risposta.

Fondamentalmente, tutto ciò che è necessario fare è includere il parametro del protocollo, ad es.

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

Url.Content! = Url.Action – SoonDead

+0

tu sei il mio eroe ..... :) – Tom

+0

Questo è un risposta migliore rispetto all'utilizzo di 'String.Format'. +1 – Yuck

0

Per chiunque abbia bisogno di costruire gli URL in WebAPI 2.2 e/o MVC5, questo ha funzionato per me:

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