Dans ASP.NET 4, c'était aussi simple que routes.LowercaseUrls = true;
dans le RegisterRoutes
gestionnaire de l'application.
Je ne trouve pas d'équivalent dans ASP.NET Core pour y parvenir. Je pense que ce serait ici:
app.UseMvc(configureRoutes =>
{
configureRoutes.MapRoute("Default", "{controller=App}/{action=Index}/{id?}");
});
Mais rien dans les configureRoutes
regards ne le permet ... à moins qu'il n'y ait une méthode d'extension quelque part que je ne trouve peut-être pas dans la documentation?
c#
asp.net-core
asp.net-core-mvc
mariocatch
la source
la source
AddMvc()
votreStartup.ConfigureServices()
méthode.AddRouting()
qui est également appelé parAddMvc()
utilise lesTry
variantes des méthodes pour ajouter des dépendances à votre collection de services. Ainsi, lorsqu'il verra que les dépendances de routage ont déjà été ajoutées, il ignorera ces parties deAddMvc()
la logique de configuration.Mise à jour dans la version ASP.NET Core> = 2.2
À partir d' ASP.NET Core 2.2 , en plus des minuscules, vous pouvez également rendre votre itinéraire en pointillés en utilisant
ConstraintMap
ce qui rendra votre itinéraire/Employee/EmployeeDetails/1
au/employee/employee-details/1
lieu de/employee/employeedetails/1
.Pour ce faire, créez d'abord la
SlugifyParameterTransformer
classe comme suit: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(); } }
Pour ASP.NET Core 2.2 MVC:
Dans la
ConfigureServices
méthode de laStartup
classe:services.AddRouting(option => { option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer); });
Et la configuration de l'itinéraire doit être la suivante:
app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller:slugify}/{action:slugify}/{id?}", defaults: new { controller = "Home", action = "Index" }); });
Pour l'API Web ASP.NET Core 2.2:
Dans la
ConfigureServices
méthode de laStartup
classe:public void ConfigureServices(IServiceCollection services) { services.AddMvc(options => { options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer())); }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
Pour ASP.NET Core> = 3.0 MVC:
Dans la
ConfigureServices
méthode de laStartup
classe:services.AddRouting(option => { option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer); });
Et la configuration de l'itinéraire doit être la suivante:
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" }); });
Pour l'API Web ASP.NET Core> = 3.0:
Dans la
ConfigureServices
méthode de laStartup
classe:services.AddControllers(options => { options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer())); });
Pour ASP.NET Core> = 3.0 Razor Pages:
Dans la
ConfigureServices
méthode de laStartup
classe:services.AddRazorPages(options => { options.Conventions.Add(new PageRouteTransformerConvention(new SlugifyParameterTransformer())); })
Ceci fera
/Employee/EmployeeDetails/1
route vers/employee/employee-details/1
la source
employee-details
. Voulez-vous me montrer votre configuration s'il vous plaît?Comme d'autres réponses l'indiquent, ajouter:
services.Configure<RouteOptions>(options => options.LowercaseUrls = true);
avant
fonctionne très bien, mais je tiens également à ajouter que si vous utilisez Identity, vous aurez également besoin de:
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(); });
Et évidemment, remplacez les deux
IdentityUser
, etIdentityRole
par vos propres classes si nécessaire.Je viens de tester cela avec .NET Core SDK 1.0.4 et le runtime 1.0.5.
la source
J'ai trouvé la solution.
Dans l'assembly:
Microsoft.AspNet.Routing
et l'Microsoft.Extensions.DependencyInjection
espace de noms, vous pouvez le faire dans votreConfigureServices(IServiceCollection services)
méthode:services.ConfigureRouting(setupAction => { setupAction.LowercaseUrls = true; });
la source
Pour l'identité, la réponse de @Jorge Yanes Diez ne fonctionne pas dans
ASP.NET Core 2.2
( je pense 2.x ), donc si vous utilisez Identity et ASP.NET Core 2.2 (2.x), voici la solution:services.ConfigureApplicationCookie(options => { options.LoginPath = "/account/login"; options.ReturnUrlParameter = "returnurl"; ... });
Réf: configurer l'identité ASP.NET Core
la source
J'avais ceci sur RegisterRoutes :: RouteConfig:
routes.LowercaseUrls = true;
la source