如何按操作覆盖RouteOptions.LowercaseUrls?

时间:2018-12-05 04:40:56

标签: asp.net-core routing asp.net-mvc-routing

在我的ASP.NET Core 2.1 Web应用程序中,我的启动方法中包含以下内容:

services.Configure<RouteOptions>( o =>
{
    o.LowercaseUrls = true;
} );

对于未初始化的用户,此设置将使UrlHelper以小写形式呈现所有路径成分(而不是查询字符串项)。

例如,鉴于此控制器和操作:

public class FooController : Controller
{
    [Route("/FOO/bAR/{baz}")]
    public IActionResult Bar( [FromRoute] String baz, [FromQuery] String qux )
    {
        // ...
    }
}

给出Razor表达式:

@Url.Action( action: nameof(FooController.Bar), new { baz = "Ab", qux = "Ab" } )

使用o.LowercaseUrls = false,将呈现该图像:

/FOO/bAR/Ab?qux=Ab

使用o.LowercaseUrls = true,将呈现该图像:

/foo/bar/ab?qux=Ab

对于我的90%的操作,使用LowercaseUrls = true很好(甚至首选!),但是对于少数几个URL,保留路由参数的大小写非常重要(尤其是当路由参数是Base64编码或Linux文件名(区分大小写很重要)。

当前唯一的解决方法是将它们转换为查询字符串参数而不是路由参数,但这并不理想。

我有什么办法可以用[PreserveRouteParameterCasing]之类的符号来注释动作?

0 个答案:

没有答案