2009-03-28 11 views
69

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

136

Vedere HttpRequest.IsLocal

bool isLocal = HttpContext.Current.Request.IsLocal; 
+3

Che dire dove richiesta è nullo. e: Application_start? – mmtemporary

+0

@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. –

+1

@ViniciusRocha In alcuni scenari vogliamo verificare che quando Richiesta è nullo. – mmtemporary

12

È possibile controllare la proprietà Request.IsLocal

0

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.

+0

Non mi sono reso conto che potrei usare la classe HttpContext per accedere all'oggetto Request. – Sean

+0

Per curiosità, quale altro metodo di accesso all'oggetto Richiesta è disponibile? Grazie :) –

+0

System.Web.UI.Page.Request – Sean

1

Request.IsLocal equivale a verificare 127.0.0.1 o :: 1. Vedi questo post: http://forums.asp.net/p/1065813/4081335.aspx.

+2

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

+0

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

+1

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

0

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.

1

In una vista MVC/pagina ASP/codice dietro classe:

bool isLocal = HttpContext.Current.Request.IsLocal; 

In un controller MVC:

bool isLocal = Request.IsLocal; 
Problemi correlati