Desidero sapere se esiste un metodo consigliato per determinare se un'applicazione ASP è in esecuzione localmente. Al momento utilizzo l'oggetto Request e faccio una stringa di ricerca per localhost o 127.0.0.1 sulla variabile del server ma questo ha diverse limitazioni. Il più grande è che l'oggetto Request non è sempre disponibile quando ne ho bisogno.Determinare se l'applicazione ASP.NET è in esecuzione in locale
risposta
Vedere HttpRequest.IsLocal
bool isLocal = HttpContext.Current.Request.IsLocal;
È possibile controllare la proprietà Request.IsLocal
richiesta non è sempre disponibile in ambiente ASP.NET?
HttpContext e le relative proprietà Richiesta/Risposta vengono inizializzate non appena il server inizia l'elaborazione della pagina. Quindi in qualsiasi posto puoi eseguire codice C# nel tuo ciclo di vita della pagina dovresti essere in grado di controllare l'url della richiesta.
Request.IsLocal equivale a verificare 127.0.0.1 o :: 1. Vedi questo post: http://forums.asp.net/p/1065813/4081335.aspx.
Sì, ma l'utilizzo di una chiamata di libreria standard trasmette meglio l'intenzione del codice, IMO. Preferirei usare la libreria piuttosto che scrivere il mio codice per fare una cosa così semplice. – Sean
Sono d'accordo. Volevo solo sottolineare che, poiché la risposta designata potrebbe essere lo stesso codice usato da quello utilizzato dal poster, la risposta potrebbe avere gli stessi limiti. – ZLA
Questo link non è corretto. Se colpisco il mio server localmente tramite il suo indirizzo IP, HttpContext.Current.Request.IsLocal restituisce correttamente true, ma UserHostAddress è l'indirizzo IP reale, non 127.0.0.1 (o :: 1). Testato su .NET 4. – mhenry1384
Se HttpContext.Current non è uso nullo
HttpContext.Current.Request.IsLocal
In caso contrario, per esempio nel App_Start o prima HttpContext.Current è disponibile, è possibile testare
HostingEnvironment.ApplicationPhysicalPath.StartsWith(@"C:\")
o un disco dedicato sul tuo PC.
Un altro modo può essere utilizzare una variabile di compilazione costante impostata in produzione, ad esempio da Azure e visualstudio.com se li si utilizza.
È sporco, ma funziona.
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, what determines the value of 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;
Che dire dove richiesta è nullo. e: Application_start? – mmtemporary
@mmtemporary durante Application_Start non c'è richiesta, non c'è motivo di verificare se Request.IsLocal o meno. Se si desidera utilizzarlo su Global.asax, è consigliabile utilizzarlo all'interno di Application_BeginRequest. –
@ViniciusRocha In alcuni scenari vogliamo verificare che quando Richiesta è nullo. – mmtemporary