5

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

4

3 回答 3

3

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

public static string GetRealUserHostAddress(this HttpRequestBase request)
{
    return request.Headers["HeaderName"] ?? request.UserHostAddress;
}
于 2012-08-08T14:50:27.417 回答
1

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

string realIP = HttpContext.Request.Headers["actual_header_key"];
于 2012-08-08T14:26:00.137 回答
1

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

于 2012-08-08T14:26:12.493 回答