In ASP.NET 4 war dies so einfach wie routes.LowercaseUrls = true;
im RegisterRoutes
Handler für die App.
Ich kann in ASP.NET Core kein Äquivalent finden, um dies zu erreichen. Ich würde denken, es wäre hier:
app.UseMvc(configureRoutes =>
{
configureRoutes.MapRoute("Default", "{controller=App}/{action=Index}/{id?}");
});
Aber nichts in configureRoutes
sieht aus, um es zuzulassen ... es sei denn, es gibt irgendwo eine Erweiterungsmethode, die ich vielleicht nicht in den Dokumenten finden kann?
c#
asp.net-core
asp.net-core-mvc
Mariocatch
quelle
quelle
AddMvc()
IhreStartup.ConfigureServices()
Methode tatsächlich aufrufen .AddRouting()
Dies wird auch vonAddMvc()
verwendet, indem dieTry
Varianten der Methoden zum Hinzufügen von Abhängigkeiten zu Ihrer Service-Sammlung verwendet werden. Wenn also festgestellt wird, dass die Routing-Abhängigkeiten bereits hinzugefügt wurden, werden diese Teile derAddMvc()
Setup-Logik übersprungen.Update in ASP.NET Core Version> = 2.2
Von ASP.NET - Core 2.2 , zusammen mit Klein Sie auch Ihre machen Route gestrichelte verwenden ,
ConstraintMap
die Ihre Route machen/Employee/EmployeeDetails/1
zu/employee/employee-details/1
statt/employee/employeedetails/1
.Erstellen Sie dazu zunächst die
SlugifyParameterTransformer
Klasse wie folgt: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(); } }
Für ASP.NET Core 2.2 MVC:
In der
ConfigureServices
Methode derStartup
Klasse:services.AddRouting(option => { option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer); });
Die Routenkonfiguration sollte wie folgt aussehen:
app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller:slugify}/{action:slugify}/{id?}", defaults: new { controller = "Home", action = "Index" }); });
Für die ASP.NET Core 2.2-Web-API:
In der
ConfigureServices
Methode derStartup
Klasse:public void ConfigureServices(IServiceCollection services) { services.AddMvc(options => { options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer())); }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
Für ASP.NET Core> = 3.0 MVC:
In der
ConfigureServices
Methode derStartup
Klasse:services.AddRouting(option => { option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer); });
Die Routenkonfiguration sollte wie folgt aussehen:
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" }); });
Für ASP.NET Core> = 3.0 Web API:
In der
ConfigureServices
Methode derStartup
Klasse:services.AddControllers(options => { options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer())); });
Für ASP.NET Core> = 3.0 Rasiermesserseiten:
In der
ConfigureServices
Methode derStartup
Klasse:services.AddRazorPages(options => { options.Conventions.Add(new PageRouteTransformerConvention(new SlugifyParameterTransformer())); })
Dies wird den
/Employee/EmployeeDetails/1
Weg zu machen/employee/employee-details/1
quelle
employee-details
. Würden Sie mir bitte Ihre Konfiguration zeigen?Wie andere Antworten zeigen, fügen Sie hinzu:
services.Configure<RouteOptions>(options => options.LowercaseUrls = true);
Vor
funktioniert gut, aber ich möchte auch hinzufügen, dass Sie, wenn Sie Identität verwenden, auch Folgendes benötigen:
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(); });
Und natürlich ersetzen Sie beide
IdentityUser
undIdentityRole
bei Bedarf durch Ihre eigenen Klassen.Ich habe dies gerade mit .NET Core SDK 1.0.4 und der Laufzeit 1.0.5 getestet.
quelle
Die Lösung gefunden.
In der Assembly:
Microsoft.AspNet.Routing
und imMicrosoft.Extensions.DependencyInjection
Namespace können Sie dies in IhrerConfigureServices(IServiceCollection services)
Methode tun :services.ConfigureRouting(setupAction => { setupAction.LowercaseUrls = true; });
quelle
Für die Identität funktioniert die Antwort von @Jorge Yanes Diez nicht
ASP.NET Core 2.2
( ich denke 2.x ). Wenn Sie also Identität und ASP.NET Core 2.2 (2.x) verwenden, ist hier die Lösung:services.ConfigureApplicationCookie(options => { options.LoginPath = "/account/login"; options.ReturnUrlParameter = "returnurl"; ... });
Ref: Konfigurieren Sie die ASP.NET-Kernidentität
quelle
Ich hatte dies auf RegisterRoutes :: RouteConfig:
route.LowercaseUrls = true;
quelle