我的情况是,我们已经开发的网站(很大程度上依赖于用户IP地址Request.UserHostAddress
)现在部署在CloudFlare代理之后。因此,现在我们需要检查是否存在CloudFlare的原始IP头。
我打算编写一个可以在Action发生之前运行的过滤器/模块,这样我们就不必修改代码了。我需要Filter / Module将UserHostAddress
替换为Header中的值(如果存在)。
但是,我不知道Action Filter是否可以实际修改Requeset UserHostAddress,也无法找到任何覆盖RequestContext对象创建的内容。
是否可以通过Action Filter和/或IIS Module实现此目的?如果有,我应该寻找什么关键字?
答案 0 :(得分:0)
HttpRequest类中的UserHostAddress属性是只读的,因此无法更改,但您可以在HttpRequest类中添加扩展方法,并使其默认从UserHostAddress读取,如果是特定的头或路由数据存在,例如:OriginalUserHostAddress,然后返回其值。
在操作过滤器中,您可以检查防火墙标头及其是否存在,然后设置路由数据变量或临时数据变量,并从扩展方法中读取它。