C# 向ASP.NET核心web应用程序添加重写规则时,为什么会出现System.FormatException?
我有一个ASP.NET核心web应用程序,我正在尝试配置一些URL重写规则。我希望每个环境都有不同的规则,因此在我的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文
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}
。