【发布时间】:2021-05-19 21:37:51
【问题描述】:
这是Parameter binding to either route or querystring in ASP.NET MVC Core 的延续。我在 .NET Core 3.1 中有一个 ASP.NET MVC 网站,我正在尝试 URL 重写以将查询字符串值放入路径中,例如 /api/Values?id=1。我已经从https://github.com/dotnet/AspNetCore.Docs/tree/master/aspnetcore/fundamentals/url-rewriting/samples/ 下载了示例应用程序,并将我自己的规则添加到IISUrlRewrite.xml 文件中,如下所示:
<rewrite>
<rules>
<rule name="my rule" stopProcessing="true">
<match url="^api/(\w+)$" />
<condition>
<add input="{QUERY_STRING}" pattern="id=([0-9]+)" />
</condition>
<action type="Rewrite" url="api/{R:1}/{C:1}" appendQueryString="false"/>
</rule>
</rules>
</rewrite>
但是,当我运行应用程序并转到 /api/Values?id=1 时,重写后的 URL 是 /api/Values/?id=1。所以我们可以看到规则被应用了,{R:1}(来自路径的反向引用)被正确应用了,但是应该是 ID 号的{C:1} 是整个查询字符串值。
所以我尝试将规则更改为这样:
<rule name="some other rule" stopProcessing="true">
<match url="^api/(\w+)$" />
<condition>
<add input="{QUERY_STRING}" pattern="id=1" />
</condition>
<action type="Rewrite" url="api/{R:1}/1" appendQueryString="false"/>
</rule>
这样做使得重写的 URL 为api/Values/1?id=1。因此,即使appendQueryString 属性设置为false,似乎仍会附加整个查询字符串。
我错过了什么?谢谢。
【问题讨论】:
标签: c# asp.net-mvc url-rewriting asp.net-core-mvc