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 文件中的“请求”不需要“使用”,并且在此上下文中不提供任何内容。

我该如何解决这个问题?

4

2 回答 2

53

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

但是,您仍然可以通过以下方式获取 HttpRequestHttpContext.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 回答