C# 如何识别请求是否来自URL重写模块
抱歉,如果标题不清楚,基本上我有一个web代理,在端口80上侦听,并且我在IIS上设置了URL重写(web.config上的规则如下),确实如此 ->C# 如何识别请求是否来自URL重写模块,c#,iis,url-rewriting,arr,C#,Iis,Url Rewriting,Arr,抱歉,如果标题不清楚,基本上我有一个web代理,在端口80上侦听,并且我在IIS上设置了URL重写(web.config上的规则如下),确实如此 -> -> -> 我怎样才能做到这一点?或者有没有其他办法 非常感谢 Ming您可以尝试访问 Request.ServerVariables["HTTP_X_ORIGINAL_URL"] 并将其与Request.Url.PathAndQuery进行比较。或者 Request.RawUrl 还应包含原始URL。我最终找到了自己的解决方案,即在
->
->
我怎样才能做到这一点?或者有没有其他办法
非常感谢
Ming您可以尝试访问
Request.ServerVariables["HTTP_X_ORIGINAL_URL"]
并将其与Request.Url.PathAndQuery进行比较。或者
Request.RawUrl
还应包含原始URL。我最终找到了自己的解决方案,即在IIS重写URL时添加查询字符串
Url重写模块足够聪明,可以将querystring arr=1附加到Url,而不管Url是否已经有查询字符串
然后我添加代码来检查querystring是否包含arr=1,如果包含,那么请求通过url重写来实现
<rule name="api-example" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^.*/api/.*$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="(.*)" negate="false" />
</conditions>
<action type="Rewrite" url="http://localhost:8095/{R:0}?arr=1" appendQueryString="true" logRewrittenUrl="false" />
</rule>
Hi我试过了,HTTP_X_ORIGINAL_URL在重写URL之前只显示原始路径和查询字符串,但没有域值,如果我转发到另一个路径和查询字符串完全相同的web服务器,这将不会有帮助。而原始url根本没有帮助。
<rule name="api-example" enabled="true" patternSyntax="ECMAScript" stopProcessing="true">
<match url="^.*/api/.*$" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{QUERY_STRING}" pattern="(.*)" negate="false" />
</conditions>
<action type="Rewrite" url="http://localhost:8095/{R:0}?arr=1" appendQueryString="true" logRewrittenUrl="false" />
</rule>