2009-02-19 6 views
47

Per semplificare la condivisione di file con un'altra app su un server diverso, sto utilizzando un tag href di base nella mia pagina principale. Come molte persone hanno scoperto, questo rompe i percorsi webform. Ho una classe Form Adapter funzionante ma non sono sicuro di come ottenere il percorso assoluto dell'URL. Attualmente, il mio programma è codificato da usare qualcosa di simile a:Asp.Net Percorso assoluto di un URL

HttpContext Context = HttpContext.Current; 
value = "http://localhost" + Context.Request.RawUrl; 

Vale la pena notare che sto testando sul mio server IIS locale, quindi non c'è una strana tendenza per un sacco di cose che ho provato ad utilizzare in ordine ciò che il percorso assoluto non include il nome di dominio (il mio IIS locale non è visibile esternamente). Il che significa che non è un percorso assoluto e quindi la base href lo distruggerà.

C'è un buon modo per gestire questo in modo tale che funzionerà localmente senza hardcoding ma funzionerà anche correttamente quando caricato su un server? Preferirei evitare tutto ciò che implica fare qualcosa di diverso sulla copia lato server.

Sì, mi rendo conto che potrei usare file web.config separati localmente e sul server per ottenere questa informazione ma questo è brutto e viola DRY.

+0

Non sono sicuro ma, hai provato Request.Url.Host? –

risposta

108

Ho usato questo in passato:

// Gets the base url in the following format: 
// "http(s)://domain(:port)/AppPath" 
HttpContext.Current.Request.Url.Scheme 
    + "://" 
    + HttpContext.Current.Request.Url.Authority 
    + HttpContext.Current.Request.ApplicationPath; 
-9

Codice:

string loginUrl = Request.Url.GetLeftPart(UriPartial.Authority) + VirtualPathUtility.ToAbsolute("~/") + "Login/Login.aspx?UserName=" + LoggedinUser["UserName"] + "&Password=" + LoggedinUser["Password"]; 
+7

Cosa molto brutta per inserire la password nell'URL. Non farlo. –

2

Vecchio post, ma qui è un altro metodo leggermente meno prolissa

var baseUri = new Uri(HttpContext.Current.Request.Url, "/"); 
0

ho usato segue e ha funzionato sia per me che per il server.

string surl = string.Format("{0}://{1}", 
    HttpContext.Current.Request.Url.Scheme, 
    HttpContext.Current.Request.Url.Authority);