Как я могу переопределить RouteOptions.LowercaseUrls для каждого отдельного действия? - PullRequest
0 голосов
/ 05 декабря 2018

В моем веб-приложении ASP.NET Core 2.1 у меня есть это в моем методе запуска:

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 )
    {
        // ...
    }
}

И учитывая это выражение бритвы:

@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

Использование LowercaseUrls = true хорошо (даже предпочтительно!) для 90% моих действий, нодля нескольких URL-адресов важно, чтобы регистр параметров маршрута был сохранен (в частности, когда параметр маршрута является именем в кодировке Base64 или Linux, где важна чувствительность к регистру).

В настоящее время единственный обходной путьэто преобразовать их в параметры строки запроса вместо параметров маршрута, но это не идеально.

Можно ли как-то пометить действие с помощью чего-то вроде [PreserveRouteParameterCasing] или аналогичного?

...