C# 为什么叫';请求';在class.cs文件中写入时不存在?

C# 为什么叫';请求';在class.cs文件中写入时不存在?,c#,asp.net,C#,Asp.net,我想将下面的代码从一个c#aspx.cs文件移到一个独立的class.cs文件中 string getIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (String.IsNullOrEmpty(getIP)) getIP = Request.ServerVariables["REMOTE_ADDR"]; 这段代码用于驻留在aspx.cs文件的页面加载中,工作正常,但它在类文件中引发了一个错误 在aspx.cs文件中,“请求”不需

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

string getIP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (String.IsNullOrEmpty(getIP)) getIP = Request.ServerVariables["REMOTE_ADDR"];
这段代码用于驻留在aspx.cs文件的页面加载中,工作正常,但它在类文件中引发了一个错误

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

如何解决此问题?

是page类的属性。因此,您不能从“独立”类访问它

但是,您仍然可以通过

请注意,这即使在静态方法中也有效。但仅当您处于HttpContext中时(因此不在Winforms应用程序中)。因此,您应该确保它不是
null

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

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

它不起作用的原因是您无法访问类库项目中的服务器变量


您应该避免尝试将其作为web类,而是通过普通参数将所需的信息传递给class对象。

+1但在这些情况下,我通常更喜欢承载代码的方法要求HttpContext作为参数参数(或类似构造)。我希望在公共界面中看到一些东西,这些东西是该代码所期望的web上下文类型。
if (HttpContext.Current != null)
{
    var request = HttpContext.Current.Request;
}