URL根据PostAuthenticate结果重写重定向

时间:2016-08-03 19:09:35

标签: c# iis url-rewriting iis-7.5 arr

使用Url Rewrite模块,我想根据自定义身份验证过程中检索到的某些值来驱动重写。

在PostAuthenticateRequest期间,我尝试使用HttpContext.Current.Request.Headers.Add("name", "value");设置HTTP标头,该标头在离开HTTPModule之前在请求对象上可见。

但是在URL Rewrite中,由于HTTP_name下没有文本,因此基本条件失败。

<rule name="customrule" enabled="true" stopProcessing="true">
  <match url="(.*)" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{HTTP_name}" pattern=".+" /> <!-- doesn't work -->
    <!-- <add input="{HTTP_name}" pattern=".*" /> works -->
  </conditions>
  <action type="Rewrite" url="https://someotherdomain/{R:0}" />
</rule>

将条件上的模式更改为。*允许规则通过,但URL以https:///{R:0}形式出现。如果我在从服务器请求资源之前手动添加name标题,它就能够找到数据。不幸的是,在提出请求之前我没有关于数据的数据。

我可以在IIS模块中使用标头吗?如何从PostAuthenticate中获取值到URL Rewrite?

1 个答案:

答案 0 :(得分:0)

根据此博客http://blogs.iis.net/wonyoo/relationship-between-application-request-routing-and-url-rewrite-modules,ARR实施在URL重写后的某个时刻发生,并且是外部服务器的实际代理。

根据我的理解,Url Rewrite模块会在请求管道中尽早拉出标头。因此,Url Rewrite模块无法访问标头。管道继续通过Authentication&amp; amp; PostAuthentication并最终移交给Application Request路由责任作为代理。