Come ottenere il nome host completo + numero di porta in Application_Start di Global.aspx?

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)