2012-05-03 14 views
16

Vorrei spostare la seguente parte di codice da un file C# aspx.cs in un file class.cs standalone.Perché il nome "Richiesta" non esiste quando si scrive in un file class.cs?

string getIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 
if (String.IsNullOrEmpty(getIP)) getIP = Request.ServerVariables["REMOTE_ADDR"]; 

Questo pezzo di codice utilizzato per risiedere nella Page Load di un file aspx.cs ha funzionato bene, ma solleva un errore nel file di classe.

La "Richiesta" non richiede "l'uso" quando si trova in un file aspx.cs e non ne offre alcuna in questo contesto.

Come posso risolvere questo problema?

risposta

41

Request è una proprietà della classe di pagine. Pertanto non è possibile accedervi da una classe "standalone".

Tuttavia, è possibile ottenere il HttpRequest comunque tramite HttpContext.Current

var request = HttpContext.Current.Request; 

Nota che questo funziona anche in un metodo statico. Ma solo se sei in un HttpContext (quindi non in un'applicazione Winforms). Quindi è necessario assicurarsi che non è null:

if (HttpContext.Current != null) 
{ 
    var request = HttpContext.Current.Request; 
} 

Edit: Naturalmente si può anche passare la richiesta come parametro al metodo che consuma. Questa è una buona pratica poiché non funziona senza. In questo modo ogni cliente saprebbe immediatamente se questa classe/metodo funziona o meno.

+3

+1, ma in questi casi di solito preferisco il metodo che ospita il codice per richiedere un HttpContext come argomento parametro (o costrutto simile). Mi piacerebbe vedere qualcosa nell'interfaccia pubblica per il tipo che questo codice si aspetta un contesto web. –

+1

Concordato con Joel – MikeTWebb

+0

Anch'io. Modificato la mia risposta. –

1

Il motivo per cui non funziona è perché non è possibile accedere alle variabili del server in un progetto di libreria di classi.

Si dovrebbe evitare di provare a fare questo atto come una classe web e invece passare le informazioni necessarie all'oggetto classe tramite un parametro normale.

Problemi correlati