是否可以更改操作过滤器或模块中的请求 IP/Request 上下文?

Is it possible to change Request IP/Request Context in Action Filter or Module?

我的情况是,我们已经开发的网站(很大程度上依赖于用户 IP 地址 Request.UserHostAddress)现在部署在 CloudFlare 代理后面。因此,现在我们需要检查是否有CloudFlare的原始IPheader。

我打算写一个 Filter/Module 可以 运行 在 Action 发生之前,这样我们就不必修改代码。我需要 Filter/Module 将 UserHostAddress 替换为 Header 中的值(如果存在)。

但是,我不知道 Action Filter 是否真的可以修改 Requeset UserHostAddress,我也找不到任何东西来覆盖 RequestContext 的创建 object。

是否可以通过 Action Filter and/or IIS 模块实现此目的?如果有,我应该寻找什么关键字?

HttpRequestclass中的UserHostAddress属性是只读的,所以不能改,但是可以在HttpRequestclass中添加一个扩展方法,使之默认情况下从 UserHostAddress 读取,如果存在特定的 header 或路由数据,例如:OriginalUserHostAddress,则 return 它的值。

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