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

时间:2016-09-27 05:07:49

标签: c# asp.net asp.net-mvc iis-8

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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