Di ASP.NET 4 ini semudah routes.LowercaseUrls = true;
di RegisterRoutes
handler untuk aplikasi.
Saya tidak dapat menemukan padanan dalam ASP.NET Core untuk mencapai ini. Saya pikir itu akan ada di sini:
app.UseMvc(configureRoutes =>
{
configureRoutes.MapRoute("Default", "{controller=App}/{action=Index}/{id?}");
});
Tetapi tidak ada yang configureRoutes
terlihat untuk mengizinkannya ... kecuali ada metode ekstensi di suatu tempat yang tidak dapat saya temukan di dokumen, mungkin?
c#
asp.net-core
asp.net-core-mvc
mariocatch
sumber
sumber
AddMvc()
AndaStartup.ConfigureServices()
.AddRouting()
yang juga dipanggil denganAddMvc()
menggunakanTry
varian metode untuk menambahkan dependensi ke kumpulan layanan Anda. Jadi ketika melihat bahwa dependensi perutean telah ditambahkan, itu akan melewati bagianAddMvc()
logika pengaturan itu.Pembaruan dalam Versi Inti ASP.NET> = 2.2
Dari ASP.NET Inti 2.2 , bersama dengan huruf kecil Anda juga dapat membuat Anda dengan berlari menggunakan
ConstraintMap
yang akan membuat rute Anda/Employee/EmployeeDetails/1
untuk/employee/employee-details/1
bukan/employee/employeedetails/1
.Untuk melakukannya, buat
SlugifyParameterTransformer
kelas terlebih dahulu harus seperti berikut: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(); } }
Untuk ASP.NET Core 2.2 MVC:
Dalam
ConfigureServices
metodeStartup
kelas:services.AddRouting(option => { option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer); });
Dan konfigurasi Rute harus sebagai berikut:
app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller:slugify}/{action:slugify}/{id?}", defaults: new { controller = "Home", action = "Index" }); });
Untuk ASP.NET Core 2.2 Web API:
Dalam
ConfigureServices
metodeStartup
kelas:public void ConfigureServices(IServiceCollection services) { services.AddMvc(options => { options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer())); }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2); }
Untuk ASP.NET Core> = 3.0 MVC:
Dalam
ConfigureServices
metodeStartup
kelas:services.AddRouting(option => { option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer); });
Dan konfigurasi Rute harus sebagai berikut:
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" }); });
Untuk ASP.NET Core> = 3.0 Web API:
Dalam
ConfigureServices
metodeStartup
kelas:services.AddControllers(options => { options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer())); });
Untuk ASP.NET Core> = 3.0 Razor Pages:
Dalam
ConfigureServices
metodeStartup
kelas:services.AddRazorPages(options => { options.Conventions.Add(new PageRouteTransformerConvention(new SlugifyParameterTransformer())); })
Ini akan membuat
/Employee/EmployeeDetails/1
rute ke/employee/employee-details/1
sumber
employee-details
. Tolong tunjukkan konfigurasi Anda.Seperti jawaban lain menunjukkan, menambahkan:
services.Configure<RouteOptions>(options => options.LowercaseUrls = true);
sebelum
berfungsi dengan baik, tetapi saya juga ingin menambahkan bahwa jika Anda menggunakan Identity, Anda juga akan memerlukan:
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(); });
Dan tentunya, ganti keduanya
IdentityUser
, danIdentityRole
dengan kelas Anda sendiri jika diperlukan.Saya baru saja menguji ini dengan .NET Core SDK 1.0.4 dan runtime 1.0.5.
sumber
Menemukan solusinya.
Di assembly:,
Microsoft.AspNet.Routing
danMicrosoft.Extensions.DependencyInjection
namespace, Anda dapat melakukan ini dalamConfigureServices(IServiceCollection services)
metode Anda :services.ConfigureRouting(setupAction => { setupAction.LowercaseUrls = true; });
sumber
Untuk identitas, jawaban @Jorge Yanes Diez tidak berfungsi
ASP.NET Core 2.2
( menurut saya 2.x ), jadi jika Anda menggunakan Identity dan ASP.NET Core 2.2 (2.x) berikut solusinya:services.ConfigureApplicationCookie(options => { options.LoginPath = "/account/login"; options.ReturnUrlParameter = "returnurl"; ... });
Ref: Konfigurasi Identitas Inti ASP.NET
sumber
Saya punya ini di RegisterRoutes :: RouteConfig:
routes.LowercaseUrls = true;
sumber