是否可以覆盖HttpRequest类的UserHostAddress属性?

时间:2012-08-08 14:05:57

标签: c# asp.net vb.net proxy-server

我的情况是我需要将我的应用程序放在代理服务器后面,这会导致进入我的应用程序的所有请求具有代理服务器使用的相同IP地址集。但是,代理服务器在自定义标头中提供请求者的真实IP地址,我可以通过我的应用程序使用,这样我就可以知道请求者的真实IP地址。这主要用于记录和跟踪。有没有办法让UserHostAddress属性返回此自定义标头中的值?这样可以节省大量的工作,因为这个属性引用了大约几百次。

3 个答案:

答案 0 :(得分:2)

无法更改UserHostAddress属性的行为,但您可以做的是向Request类添加扩展方法(类似于GetRealUserHostAddress()),并在UserHostAddress上执行全局替换 - > GetRealUserHostAddress()可以快速整理解决方案中的所有实例。

public static string GetRealUserHostAddress(this HttpRequestBase request)
{
    return request.Headers["HeaderName"] ?? request.UserHostAddress;
}

答案 1 :(得分:0)

如果您说代理返回发出请求的客户端的真实IP地址,则无需使用UserHostAddress来读取它;你可以直接阅读标题:

string realIP = HttpContext.Request.Headers["actual_header_key"];

答案 2 :(得分:0)

不,这是不可能的。您可以读取自定义标头并放置在请求上下文中,稍后再使用它。