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=1appendQueryString 属性也默认为 true

新行为

保留查询字符串。 旧行为的示例中的 URI 将为 /contact?id=1

更改原因

旧行为与 IIS UrlRewrite 模块的行为不匹配。 若要支持在中间件与模块之间进行移植,应以保持一致的行为为目标。

如果首选删除查询字符串的行为,请将 action 元素设置为 appendQueryString="false"

受影响的 API

IISUrlRewriteOptionsExtensions.AddIISUrlRewrite