В ASP.NET Core, чтобы добиться отображения маршрутов только в нижнем регистре (lowercase), необходимо установить соответствующие настройки маршрутизации. Судя по вашему коду и описанию проблемы, вы уже сделали несколько шагов в этом направлении, но есть несколько моментов, которые нужно проверить и уточнить.
1. **Конфигурация маршрутизации**:
Убедитесь, что вы вызываете метод `AddRouting` с правильными параметрами, и это происходит в правильном месте. Обычно это делается в методе `ConfigureServices` в файле `Startup.cs`. Ваш код должен выглядеть примерно так:
```csharp
public void ConfigureServices(IServiceCollection services)
{
services.Configure<RouteOptions>(options =>
{
options.LowercaseUrls = true;
options.LowercaseQueryStrings = true;
});
services.AddRouting(options => options.LowercaseUrls = true);
services.AddRazorPages(); // Если вы используете Razor Pages
// или
services.AddControllersWithViews(); // Если вы используете MVC
}
```
2. **Правила маршрутизации**:
Убедитесь, что в ваших правилах маршрутизации тоже используется нижний регистр в определениях маршрутов. Например:
```csharp
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages(); // для Razor Pages
endpoints.MapControllerRoute(
name: "default",
pattern: "products/{productId?}",
defaults: new { controller = "Products", action = "Index" }
);
});
```
3. **Обработка запросов с верхним регистром**:
Обратите внимание, что если вы используете контроллеры и у вас есть маршруты, которые ссылаются на верхний регистр, они могут не обрабатываться как новой маршрутизацией. Вам нужно убедиться, что все маршруты прописаны в нижнем регистре.
4. **Проверка Middleware**:
Убедитесь, что у вас не установлен какой-либо middleware, который может вмешиваться в обработку вышеупомянутых маршрутов и преобразовывать их обратно в верхний регистр.
5. **Кэширование**:
Если у вас включено кэширование, убедитесь, что не устаревшие данные не остаются в кэше вашего браузера или сервере.
6. **Добавление дополнительной проверки**:
Вы можете также добавить промежуточное ПО (middleware) для перенаправления всех запросов с верхним регистром к соответствующей версии с нижним регистром:
```csharp
public class LowercaseMiddleware
{
private readonly RequestDelegate _next;
public LowercaseMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
var path = context.Request.Path.Value;
if (path != null && path != path.ToLowerInvariant())
{
context.Response.Redirect(path.ToLowerInvariant());
return;
}
await _next(context);
}
}
```
Затем добавьте это middleware в конвейер обработки запросов в `Startup.cs`:
```csharp
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseMiddleware<LowercaseMiddleware>();
// Остальная конфигурация
}
```
Эти шаги должны помочь вам настроить маршруты для отображения в нижнем регистре в вашем проекте ASP.NET Core.