Поделиться через


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