C# IIS URL重写:在为多个文件提供服务时,如何可靠地保持相对路径?
我的WebApp是其中的一部分,当我向用户提供HTML页面时,它通常在a.href和img.src属性中包含相对路径 我目前通过URL访问它们,如:~/get data.aspx/实例/user/page.html——其中实例表示报表的特定实例,“user/page.html”是由生成内容的外部应用程序创建的路径 这对于应用程序的BeginRequest方法中的代码非常可靠,该方法将“.aspx”之后的文本转换为查询字符串,然后使用Context.RewritePath() 到目前为止还不错,但我刚刚被一件让我吃惊的事情绊倒了:如果任何查询字符串(“instance/user/page.html”)碰巧包含加号(“+”),则不会调用BeginRequest方法,并且会立即将404返回给用户 所以我的问题有两个:C# IIS URL重写:在为多个文件提供服务时,如何可靠地保持相对路径?,c#,iis-7,url-rewriting,url-routing,asp.net,C#,Iis 7,Url Rewriting,Url Routing,Asp.net,我的WebApp是其中的一部分,当我向用户提供HTML页面时,它通常在a.href和img.src属性中包含相对路径 我目前通过URL访问它们,如:~/get data.aspx/实例/user/page.html——其中实例表示报表的特定实例,“user/page.html”是由生成内容的外部应用程序创建的路径 这对于应用程序的BeginRequest方法中的代码非常可靠,该方法将“.aspx”之后的文本转换为查询字符串,然后使用Context.RewritePath() 到目前为止还不错,但
是,这是一个IIS安全设置。你可以把它放在你的网页配置中
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="True"/>
</security>
</system.webServer>
然而,你可能必须小心你正在做的事情。启用双转义后,它将允许转义url本身包含转义字符,这些转义字符可用于利用您的url重写将转义字符传递到您的查询字符串中,以构造不同于您预期的查询字符串。谢谢,我现在可以接受此情况,但我不希望双转义,我真的希望它不被替换——我希望字符(+,等等)不被更改地通过。这会将它们转换为空间。我了解双转义字符(如%2526),但在我的情况下,我不担心漏洞利用。实际上,Request.RawUrl仍然有+字符,但%XX已解码(%2F变为斜杠等)