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 ConstraintMap
nó sẽ làm cho tuyến của bạn /Employee/EmployeeDetails/1
đến /employee/employee-details/1
thay vì /employee/employeedetails/1
.
Để làm như vậy, trước tiên hãy tạo SlugifyParameterTransformer
lớ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 ConfigureServices
phương thức của Startup
lớ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 ConfigureServices
phương thức của Startup
lớ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 ConfigureServices
phương thức của Startup
lớ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 ConfigureServices
phương thức của Startup
lớp:
services.AddControllers(options =>
{
options.Conventions.Add(new RouteTokenTransformerConvention(new SlugifyParameterTransformer()));
});
Đối với ASP.NET Core> = 3.0 Trang Razor:
Trong ConfigureServices
phương thức của Startup
lớp:
services.AddRazorPages(options =>
{
options.Conventions.Add(new PageRouteTransformerConvention(new SlugifyParameterTransformer()));
})
Điều này sẽ làm cho /Employee/EmployeeDetails/1
tuyế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ácTry
biế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.