ASP.NET Core 3中使用动态控制器路由
创建动态路由转换对象继承 DynamicRouteValueTransformer
public class SlugRouteValueTransformer : DynamicRouteValueTransformer { public SlugRouteValueTransformer() { } public override async ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values) { var requestPath = httpContext.Request.Path.Value; if (!string.IsNullOrEmpty(requestPath) && requestPath[0] == '/') { // Trim the leading slash requestPath = requestPath.Substring(1); } if (string.IsNullOrEmpty(requestPath)) { return new RouteValueDictionary { { "area", "Core" }, { "controller", "Home" }, { "action", "Index" }, { "id", "" } }; }
//此处可以自定义 也可 通过查询数据库来确定路由到何处
//可修改的values return values; } }
在startup中插入动态路由
services.AddScoped<SlugRouteValueTransformer>();
app.UseEndpoints(endpoints => { endpoints.MapDynamicControllerRoute<SlugRouteValueTransformer>("/{**slug}"); endpoints.MapControllerRoute( name: "areas", pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"); endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });