22

次のコードを ac# aspx.cs ファイルからスタンドアロンの class.cs ファイルに移動したいと考えています。

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

aspx.cs ファイルの page_load に常駐していたこのコードは問題なく動作しましたが、クラス ファイルでエラーが発生します。

aspx.cs ファイルでは、'Request' は 'using' を必要とせず、このコンテキストでは何も提供しません。

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

53

リクエストは、ページ クラスのプロパティです。したがって、「スタンドアロン」クラスからアクセスすることはできません。

ただし、とにかく経由で HttpRequest を取得できますHttpContext.Current

 var request = HttpContext.Current.Request;

これは静的メソッドでも機能することに注意してください。ただし、HttpContext にいる場合のみ (したがって、Winforms アプリケーションではありません)。したがって、そうではないことを確認する必要がありますnull

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

編集:もちろん、リクエストをパラメータとして、それを消費するメソッドに渡すこともできます。これなしでは機能しないため、これは良い習慣です。このようにして、すべてのクライアントは、このクラス/メソッドが機能するかどうかをすぐに知ることができます。

于 2012-05-03T21:44:26.433 に答える
1

機能しない理由は、クラス ライブラリ プロジェクトでサーバー変数にアクセスできないためです。

これを Web クラスのように動作させようとするのは避け、代わりに必要な情報を通常のパラメーターを介してクラス オブジェクトに渡す必要があります。

于 2012-05-03T21:46:07.727 に答える