C# 向ASP.NET核心web应用程序添加重写规则时,为什么会出现System.FormatException?

C# 向ASP.NET核心web应用程序添加重写规则时,为什么会出现System.FormatException?,c#,asp.net,asp.net-core,url-rewriting,C#,Asp.net,Asp.net Core,Url Rewriting,我有一个ASP.NET核心web应用程序,我正在尝试配置一些URL重写规则。我希望每个环境都有不同的规则,因此在我的Startup.cs中添加了以下行: app.UseRewriter(new RewriteOptions() .AddIISUrlRewrite(env.ContentRootFileProvider, $"IISUrlRewrite.{env.EnvironmentName}.xml") ); 然后,我将一个IISUrlRewrite.development.xml文

我有一个ASP.NET核心web应用程序,我正在尝试配置一些URL重写规则。我希望每个环境都有不同的规则,因此在我的
Startup.cs
中添加了以下行:

app.UseRewriter(new RewriteOptions()
    .AddIISUrlRewrite(env.ContentRootFileProvider, $"IISUrlRewrite.{env.EnvironmentName}.xml")
);
然后,我将一个IISUrlRewrite.development.xml文件添加到web项目的根目录中,其中包含以下内容:

<rewrite>
  <rules>
    <rule name="Redirect extensionless URLs to lowercase" stopProcessing="true">
      <match url="[A-Z]" ignoreCase="false" />
      <action type="Redirect" url="{ToLower:{URL}}" />
      <conditions logicalGrouping="MatchAny">
        <add input="{REQUEST_FILENAME}" pattern="\." negate="true" />
      </conditions>
    </rule>
  </rules>
</rewrite>

但是,当我运行应用程序时,
UseRewriter
方法调用会引发异常:

System.FormatException:'无法分析URL重写文件。信息: '无法识别的参数类型:'URL',在字符串索引处终止: '13''. 行号'5':'8'


我不知道ASP.NET Core中URL重写规则的结构有任何更改,那么这种方法有什么问题?我正在使用IIS Express在本地运行。

在@tetsuya yamamoto的帮助下,我想出了一个将URL重定向到小写的有效规则,不包括物理文件的路径:

<rule name="Convert to lower case" stopProcessing="true">
  <match url=".*[A-Z].*" ignoreCase="false" />
  <conditions logicalGrouping="MatchAny">
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
  </conditions>
  <action type="Redirect" url="{ToLower:{R:0}}" redirectType="Permanent" />
</rule>


尝试使用
。似乎
URL
URL
值中未被识别为URL参数名称。不,抱歉,现在错误是“'Unrecognized parameter type:'ORIGINAL_URI'”。
如何执行小写URL规则?有趣的是,它不再出错,但逻辑是错误的。domain.com/tEsT重定向到domain.com/e,因为可能匹配返回第一个大写字符,重定向将用此字符替换此URL。不过谢谢你,有进展了!也许您需要稍微更改匹配的正则表达式模式,如
,以检测文件名。它也可能使用
{ToLower:{R:1}}{R:2}
而不是
{ToLower:{R:0}