【问题标题】:ASP.NET Core 3.1+ Endpoint routing prioritiesASP.NET Core 3.1+ 端点路由优先级
【发布时间】:2020-12-16 01:23:54
【问题描述】:

我有这样的事情:

endpoints.MapDefaultControllerRoute();
endpoints.MapDynamicControllerRoute<SeoTransformer>("{**path}");

在所有情况下都会首先调用 MapDynamicControllerRoute。怎么改?

  1. 检查现有的默认路由
  2. 如果没有找到 --> MapDynamicControllerRoute("{**path}")

【问题讨论】:

  • 你能发布 SeoTransform 代码和一些控制器代码吗?我用 asp net core 3.1 进行了测试,看起来 MapDynamicControllerRoute 调用的优先级最低,即使首先调用也是如此
  • @Leo SeoTransformer 代码对结果没有影响。有通过Request.Path在数据库中搜索控制器和动作

标签: asp.net asp.net-core


【解决方案1】:

根据document,UseEndpoints 内部的操作顺序不会影响路由的行为。

在路由的传统实现中,可以实现依赖于路由处理顺序的路由可扩展性。 ASP.NET Core 3.0 及更高版本中的端点路由:

没有路线的概念。 不提供订购保证。一次性处理所有端点。

因此,如果您想将未找到的控制器映射到特定控制器,您可以尝试使用 MapFallbackToController。

如果url不匹配其他路由,就会匹配这个fallbacktocontroller方法。

例子:

    app.UseEndpoints(endpoints =>
        {
            endpoints.MapDefaultControllerRoute();

            endpoints.MapFallbackToController("Index", "Fallback");

             });
            
        }

结果:

【讨论】:

  • MapFallbackToController 似乎不是最佳选择,因为我的 SeoTransformer 搜索了 500000 多个具有不同控制器和操作的路径。使用重定向似乎不是最好的选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
  • 2021-01-29
  • 2020-11-15
  • 2021-04-01
  • 1970-01-01
相关资源
最近更新 更多