在class.cs文件中写入时为什么名称'Request'不存在?

Dif*_*222 20 c# asp.net

我想将以下一段代码从ac #aspx.cs文件移到一个独立的class.cs文件中.

string getIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (String.IsNullOrEmpty(getIP)) getIP = Request.ServerVariables["REMOTE_ADDR"];
Run Code Online (Sandbox Code Playgroud)

这段代码驻留在aspx.cs文件的page_load中工作得很好,但它在类文件中引发了错误.

在aspx.cs文件中,"请求"不需要"使用",并且在此上下文中不提供任何内容.

我该如何解决这个问题?

Tim*_*ter 49

请求是页面类的属性.因此,您无法从"独立"类访问它.

但是,无论如何都可以获得HttpRequest HttpContext.Current

 var request = HttpContext.Current.Request;
Run Code Online (Sandbox Code Playgroud)

请注意,即使在静态方法中也是如此.但是只有你在HttpContext中(因此不在Winforms应用程序中).所以你应该确保它不是null:

if (HttpContext.Current != null)
{
    var request = HttpContext.Current.Request;
}
Run Code Online (Sandbox Code Playgroud)

编辑:当然,您也可以将请求作为参数传递给使用它的方法.这是一种很好的做法,因为它没有用.通过这种方式,每个客户端都会立即知道此类/方法是否有效.

  • +1,但在这些情况下,我通常更喜欢托管代码的方法要求HttpContext作为参数参数(或类似的构造).我希望在公共接口中看到此代码期望Web上下文的类型. (3认同)