В ASP.NET 4 это было так же просто, как и routes.LowercaseUrls = true;
в RegisterRoutes
обработчике приложения.
Я не могу найти эквивалент в ASP.NET Core для этого. Думаю, это будет здесь:
app.UseMvc(configureRoutes =>
{
configureRoutes.MapRoute("Default", "{controller=App}/{action=Index}/{id?}");
});
Но ничто во configureRoutes
внешности не позволяет это ... разве что где-то есть метод расширения, который я не могу найти в документации?
c#
asp.net-core
asp.net-core-mvc
мариокач
источник
источник
AddMvc()
свойStartup.ConfigureServices()
метод.AddRouting()
который также вызывается,AddMvc()
используетTry
варианты методов для добавления зависимостей в вашу коллекцию сервисов. Поэтому, когда он увидит, что зависимости маршрутизации уже добавлены, он пропустит эти частиAddMvc()
логики настройки.Обновление в версии ASP.NET Core> = 2.2
Из ASP.NET Ядра 2.2 , наряду с строчными вы также можете сделать свой маршрут пунктирным , используя
ConstraintMap
который сделает свой маршрут ,/Employee/EmployeeDetails/1
чтобы/employee/employee-details/1
вместо/employee/employeedetails/1
.Для этого сначала
SlugifyParameterTransformer
нужно создать класс следующим образом:public class SlugifyParameterTransformer : IOutboundParameterTransformer { public string TransformOutbound(object value) { // Slugify value return value == null ? null : Regex.Replace(value.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower(); } }
Для ASP.NET Core 2.2 MVC:
В
ConfigureServices
методеStartup
класса:services.AddRouting(option => { option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer); });
А конфигурация маршрута должна быть следующей:
app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller:slugify}/{action:slugify}/{id?}", defaults: new { controller = "Home", action = "Index" }); });
Для веб-API ASP.NET Core 2.2:
В
ConfigureServices
методеStartup
класса:public void ConfigureServices(IServiceCollection services) { services.AddMvc(options => { options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer())); }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
Для ASP.NET Core> = 3.0 MVC:
В
ConfigureServices
методеStartup
класса:services.AddRouting(option => { option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer); });
А конфигурация маршрута должна быть следующей:
app.UseEndpoints(endpoints => { endpoints.MapAreaControllerRoute( name: "AdminAreaRoute", areaName: "Admin", pattern: "admin/{controller:slugify=Dashboard}/{action:slugify=Index}/{id:slugify?}"); endpoints.MapControllerRoute( name: "default", pattern: "{controller:slugify}/{action:slugify}/{id:slugify?}", defaults: new { controller = "Home", action = "Index" }); });
Для веб-API ASP.NET Core> = 3.0:
В
ConfigureServices
методеStartup
класса:services.AddControllers(options => { options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer())); });
Для ASP.NET Core> = 3.0 Razor Pages:
В
ConfigureServices
методеStartup
класса:services.AddRazorPages(options => { options.Conventions.Add(new PageRouteTransformerConvention(new SlugifyParameterTransformer())); })
Это проложит
/Employee/EmployeeDetails/1
путь к/employee/employee-details/1
источник
employee-details
. Не могли бы вы показать мне свою конфигурацию?Как указывают другие ответы, добавление:
services.Configure<RouteOptions>(options => options.LowercaseUrls = true);
перед
отлично работает, но я также хочу добавить, что если вы используете Identity, вам также понадобятся:
services.AddIdentity<IdentityUser, IdentityRole>(options => { var appCookie = options.Cookies.ApplicationCookie; appCookie.LoginPath = appCookie.LoginPath.ToString().ToLowerInvariant(); appCookie.LogoutPath = appCookie.LogoutPath.ToString().ToLowerInvariant(); appCookie.ReturnUrlParameter = appCookie.ReturnUrlParameter.ToString().ToLowerInvariant(); });
И, очевидно, замените оба
IdentityUser
, иIdentityRole
своими собственными классами, если это необходимо.Я только что протестировал это с помощью .NET Core SDK 1.0.4 и среды выполнения 1.0.5.
источник
Нашел решение.
В сборке:
Microsoft.AspNet.Routing
иMicrosoft.Extensions.DependencyInjection
пространстве имен вы можете сделать это в своемConfigureServices(IServiceCollection services)
методе:services.ConfigureRouting(setupAction => { setupAction.LowercaseUrls = true; });
источник
Для идентичности ответ @Jorge Yanes Diez не работает
ASP.NET Core 2.2
( я думаю, 2.x ), поэтому, если вы используете Identity и ASP.NET Core 2.2 (2.x), вот решение:services.ConfigureApplicationCookie(options => { options.LoginPath = "/account/login"; options.ReturnUrlParameter = "returnurl"; ... });
Ссылка: Настройка удостоверения ASP.NET Core
источник
У меня было это в RegisterRoutes :: RouteConfig:
routes.LowercaseUrls = true;
источник