IIS:UrlRewrite 中间件保留查询字符串

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"

受影响的 API

IISUrlRewriteOptionsExtensions.AddIISUrlRewrite