Dans ASP.NET 4, cela était aussi simple que routes.LowercaseUrls = true;
dans le gestionnaire RegisterRoutes
de l'application.
Je ne trouve pas d'équivalent dans ASP.NET Core pour y parvenir. Je penserais que ce serait ici:
app.UseMvc(configureRoutes =>
{
configureRoutes.MapRoute("Default", "{controller=App}/{action=Index}/{id?}");
});
Mais rien dans configureRoutes
ne semble le permettre ... sauf s'il existe une méthode d'extension quelque part que je ne trouve pas dans la documentation peut-être?
Pour ASP.NET Core:
Ajoutez la ligne suivante à la méthode ConfigureServices
de la classe Startup
.
services.AddRouting(options => options.LowercaseUrls = true);
Merci à Skorunka pour la réponse en commentaire. Je pensais que cela valait la peine de promouvoir une réponse réelle.
Comme d'autres réponses l'indiquent, en ajoutant:
services.Configure<RouteOptions>(options => options.LowercaseUrls = true);
avant
services.AddMvc(...)
fonctionne très bien, mais je veux aussi 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 IdentityUser
et IdentityRole
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.
Trouvé la solution.
Dans l'assembly: Microsoft.AspNet.Routing
et l'espace de noms Microsoft.Extensions.DependencyInjection
, vous pouvez le faire dans votre méthode ConfigureServices(IServiceCollection services)
:
services.ConfigureRouting(setupAction =>
{
setupAction.LowercaseUrls = true;
});
De ASP.NET Core 2.2 , en minuscule, vous pouvez également définir votre itinéraire en pointillés à l'aide de ConstraintMap
, ce qui rendra votre itinéraire /Employee/EmployeeDetails/1
à /employee/employee-details/1
au lieu de /employee/employeedetails/1
.
Pour ce faire, dans la méthode ConfigureServices
de la classe Startup
:
services.AddRouting(option =>
{
option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer);
option.LowercaseUrls = true;
});
Et la classe SlugifyParameterTransformer
devrait être la suivante:
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();
}
}
Et la configuration de la route devrait être comme suit:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller:slugify}/{action:slugify}/{id?}",
defaults: new { controller = "Home", action = "Index" });
});
Ceci fera /Employee/EmployeeDetails/1
route vers /employee/employee-details/1
Pour l'identité, @Jorge Yanes Diez answer ne fonctionne pas dans ASP.NET Core 2.2
(je pense que 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";
...
});