Cập nhật trong ASP.NET Core Version> = 2.2
Từ ASP.NET Core 2.2 , cùng với chữ thường, bạn cũng có thể làm cho tuyến của mình bị đứt đoạn bằng cách sử dụng ConstraintMapnó sẽ làm cho tuyến của bạn /Employee/EmployeeDetails/1đến /employee/employee-details/1thay vì /employee/employeedetails/1.
Để làm như vậy, trước tiên hãy tạo SlugifyParameterTransformerlớp như sau:
public class SlugifyParameterTransformer : IOutboundParameterTransformer
{
public string TransformOutbound(object value)
{
return value == null ? null : Regex.Replace(value.ToString(), "([a-z])([A-Z])", "$1-$2").ToLower();
}
}
Đối với ASP.NET Core 2.2 MVC:
Trong ConfigureServicesphương thức của Startuplớp:
services.AddRouting(option =>
{
option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer);
});
Và cấu hình tuyến đường sẽ như sau:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller:slugify}/{action:slugify}/{id?}",
defaults: new { controller = "Home", action = "Index" });
});
Đối với API web ASP.NET Core 2.2:
Trong ConfigureServicesphương thức của Startuplớp:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer()));
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
Đối với ASP.NET Core> = 3.0 MVC:
Trong ConfigureServicesphương thức của Startuplớp:
services.AddRouting(option =>
{
option.ConstraintMap["slugify"] = typeof(SlugifyParameterTransformer);
});
Và cấu hình tuyến đường sẽ như sau:
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" });
});
Đối với ASP.NET Core> = 3.0 Web API:
Trong ConfigureServicesphương thức của Startuplớp:
services.AddControllers(options =>
{
options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer()));
});
Đối với ASP.NET Core> = 3.0 Trang Razor:
Trong ConfigureServicesphương thức của Startuplớp:
services.AddRazorPages(options =>
{
options.Conventions.Add(new PageRouteTransformerConvention(new SlugifyParameterTransformer()));
})
Điều này sẽ làm cho /Employee/EmployeeDetails/1tuyến đường đến/employee/employee-details/1
AddMvc()vàoStartup.ConfigureServices()phương thức của mình .AddRouting()mà còn được gọi bằng cáchAddMvc()sử dụng cácTrybiến thể của phương pháp để thêm phần phụ thuộc vào bộ sưu tập dịch vụ của bạn. Vì vậy, khi nó thấy rằng các phần phụ thuộc định tuyến đã được thêm vào, nó sẽ bỏ qua các phần đó củaAddMvc()logic thiết lập.