В моем веб-приложении 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]
или аналогичного?