繁体   English   中英

将重写规则添加到ASP.NET Core Web应用程序时,为什么会出现System.FormatException?

[英]Why am I getting System.FormatException when adding rewrite rules to ASP.NET Core web application?

我有一个ASP.NET Core 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:'无法解析UrlRewrite文件。 消息:“无法识别的参数类型: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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM