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>

上記のルールでは、クエリ文字列は追加されません。 /about?id=1 のような URI は、/contact?id=1 ではなく、/contact にリダイレクトされます。 appendQueryString 属性は既定で true にもなります。

新しい動作

クエリ文字列は保持されます。 以前の動作の例からの URI は /contact?id=1 になります。

変更理由

以前の動作は、IIS UrlRewrite モジュールの動作と一致しませんでした。 ミドルウェアとモジュールの間で移植をサポートするため、目標は一貫性のある動作を維持することになります。

クエリ文字列を削除する動作を優先する場合、action 要素を appendQueryString="false" に設定します。

影響を受ける API

IISUrlRewriteOptionsExtensions.AddIISUrlRewrite