Есть проект на
asp.net core razor pages
. Для страниц прописаны роуты, что-то на подобии такого:
public const string Product1 = "/products/product-1";
public const string Product2 = "/products/product-2";
public const string Product3 = "/products/product-3";
При переходе на саму страницу, адресная строка выглядит вот так:
https://localhost:5001/Products/Product-1
Даже если пробовать перейти по адресу, что представлен
ниже, в адресной стоке он будет заменён на тот, что
выше:
https://localhost:5001/PRODUCTS/PRODUCTS-1
Проблема в том, что есть где-то место, откуда может браться роут в таком виде. Я уже сделал несколько попыток это исправить. Конфигурация опций маршрутизации:
services.Configure<RouteOptions>(options =>
{
options.LowercaseQueryStrings = true;
options.LowercaseUrls = true;
});
Добавление правил роутинга:
services.AddRouting(x => x.LowercaseUrls = true);
Конфигурация маршрутизации на уровне
middlewares
:
app.UseEnpoints(endpoints =>
{
endpoints.EnableInnerRoutes();
});
public static void EnableInnerRoutes(this IEndpointRouteBuilder endpoints)
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=home}/{action=index}/{id?}",
defaults: new { controller = "home", action = "index" }
)
.WithMetadata(new RouteOptions()
{
LowercaseUrls = true,
LowercaseQueryStrings = true,
});
}
Анализ всех роутов и добавление их в список конвенций маршрутизации:
builder.AddRazorPagesOptions(options =>
{
// ...
foreach (var item in pageTypes)
{
var routes = item.GetCustomAttributes<PageRouteAttribute>();
var pagePrefix = item.Namespace.Replace(...); // тут часть логики убрана
var pageName = regexPageName.Replace(...); // тут часть логики убрана
if (!string.IsNullOrEmpty(pagePrefix))
{
pageName = $"{pagePrefix.ToLower()}/{pageName}";
}
foreach (var routeItem in routes)
{
// обратите внимание, что тут абсолютно все роуты для страниц добавляются в lowercase
options.Conventions.AddPageRoute($"/{pageName}", routeItem.RouteTemplate);
}
}
});
Роут аттрибут:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class PageRouteAttribute : Attribute
{
public string RouteTemplate { get; init; }
public PageRouteAttribute(string route)
{
RouteTemplate = route;
}
}
Проблема
Как настроить отображение маршрутов в
lowercase
для
asp.net core razor pages (mvc)
?