Provai
Uri uri = HttpContext.Current.Request.Url; String host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port;
e ha funzionato bene sul mio computer locale, ma quando viene pubblicato su IIS7, c’è un’eccezione che dice
System.Web.HttpException: Request is not available in this context
Qualcuno sa come raggiungerlo?
All’avvio dell’applicazione Web, non viene gestita alcuna richiesta HTTP.
Si consiglia di gestire definire il metodo Application_BeginRequest (Object Sender, EventArgs e) in cui è disponibile il contesto della richiesta.
Modifica: Ecco un esempio di codice ispirato al blog di Mike Volodarsky che Michael Shimmins ha collegato a:
void Application_BeginRequest(Object source, EventArgs e) { HttpApplication app = (HttpApplication)source; var host = FirstRequestInitialisation.Initialise(app.Context); } static class FirstRequestInitialisation { private static string host = null; private static Object s_lock = new Object(); // Initialise only on the first request public static string Initialise(HttpContext context) { if (string.IsNullOrEmpty(host)) { lock (s_lock) { if (string.IsNullOrEmpty(host)) { var uri = context.Request.Url; host = uri.GetLeftPart(UriPartial.Authority); } } } return host; } }
La risposta accettata è buona, ma nella maggior parte dei casi (se la prima richiesta è una richiesta HTTP) dovresti utilizzare meglio l’evento Session_Start
, che viene chiamato una volta per utente ogni 20 minuti circa (non so per quanto tempo la sessione è valida). Application_BeginRequest
sarà licenziato ad ogni richiesta.
public void Session_Start(Object source, EventArgs e) { //Request / Request.Url is available here :) }
Basta rispondere così se qualcuno decide di cercare effettivamente su questo argomento …
Funziona all’avvio dell’applicazione in qualsiasi modalità …
typeof(HttpContext).GetField("_request", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(HttpContext.Current)