IIS UrlRewrite 中间件缺陷阻止在重写规则中保留查询字符串。 已修复该缺陷,以保持 IIS UrlRewrite 模块行为的一致性。
有关讨论,请参阅问题 dotnet/aspnetcore#22972。
已引入的版本
ASP.NET Core 5.0
旧行为
请考虑以下重写规则:
<rule name="MyRule" stopProcessing="true">
<match url="^about" />
<action type="Redirect" url="/contact" redirectType="Temporary" appendQueryString="true" />
</rule>
前面的规则不会追加查询字符串。 这类 URI(如/about?id=1
)会重定向到/contact
而不是/contact?id=1
。 属性 appendQueryString
也默认为 true
。
新行为
将保留查询字符串。
旧行为示例中的 URI 为 /contact?id=1
。
更改原因
旧行为与 IIS UrlRewrite 模块的行为不匹配。 为了支持中间件和模块之间的移植,目标是保持一致的行为。
建议的措施
如果首选删除查询字符串的行为,请将 action
元素设置为 appendQueryString="false"
。