是否可以在Action Filter或Module中更改请求IP /请求上下文?

问题描述:

我的场景是我们已经开发的网站(它依赖于用户IP地址Request.UserHostAddress)现在部署在CloudFlare代理之后。因此,现在我们需要检查是否有CloudFlare的原始IP标头。是否可以在Action Filter或Module中更改请求IP /请求上下文?

我打算编写一个可以在Action发生之前运行的过滤器/模块,因此我们不必修改代码。如果存在的话,我需要过滤器/模块将头部的值替换为UserHostAddress

但是,我不知道Action Filter是否可以实际修改Requeset UserHostAddress,也不会发现任何可以覆盖RequestContext对象创建的内容。

是否可以通过动作过滤器和/或IIS模块来实现?如果有,我应该寻找什么关键字?

HttpRequest类中的UserHostAddress属性是只读的,因此它不能更改,但可以在HttpRequest类中添加扩展方法,并使其默认从UserHostAddress中读取,并且如果特定的标题或路由数据存在,例如:OriginalUserHostAddress,然后返回它的值。

在动作过滤器中,您可以检查防火墙头并存在,然后设置路由数据变量或临时数据变量并从扩展方法中读取它。