Determinare se l'applicazione ASP.NET è in esecuzione in locale
Domanda
Vorrei sapere se esiste un metodo consigliato per determinare se un'applicazione ASP è in esecuzione a livello locale. Al momento ho utilizzare l'oggetto Request e fare una ricerca per la stringa di localhost o 127.0.0.1 sulla variabile del server, ma questo ha diversi limiti. Il più grande è che l'oggetto Request non è sempre disponibile quando ne ho bisogno.
Soluzione
bool isLocal = HttpContext.Current.Request.IsLocal;
Altri suggerimenti
È possibile controllare la proprietà Request.IsLocal
Questo ha funzionato per me con Application_Start
if (!HostingEnvironment.IsDevelopmentEnvironment)
{
GlobalFilters.Filters.Add(new RequireHttpsAttribute());
}
Per saperne di più su come IsDevelopmentEnvironment è impostato, si prega di guardare il seguente thread.
In ASP.NET, ciò che determina il valore di HostingEnvironment.IsDevelopmentEnvironment?
In una vista MVC / pagina ASP / codice dietro classe:
bool isLocal = HttpContext.Current.Request.IsLocal;
In un controller MVC:
bool isLocal = Request.IsLocal;
Request.IsLocal è lo stesso che il controllo di 127.0.0.1 o :: 1. Vedi questo post: http://forums.asp.net/p/1065813/4081335. aspx .
Se non è HttpContext.Current uso nullo
HttpContext.Current.Request.IsLocal
In caso contrario, per esempio nel App_Start o prima HttpContext.Current è disponibile, è possibile verificare
HostingEnvironment.ApplicationPhysicalPath.StartsWith(@"C:\")
o un disco dedicato sul proprio PC.
Un altro modo può essere utilizzare una variabile costante compilation impostato in produzione, per esempio da Azure e visualstudio.com se li si usa.
E 'sporca, ma funziona.
Richiesta non è sempre disponibile in ambiente ASP.NET?
HttpContext e la sua proprietà di richiesta / risposta vengono inizializzati non appena il server avvia l'elaborazione della pagina. Quindi, in qualsiasi luogo è possibile eseguire codice C # nel ciclo di vita della pagina si dovrebbe essere in grado di controllare la richiesta URL.