c# - 当 url 的一部分已经是另一个路由时,ASP.NET Core 3.1 中的动态路由

标签 c# asp.net-core routing asp.net-core-routing dynamic-routing

我正在尝试使用 DynamicRouteValueTransformerIEndpointRouteBuilder.MapDynamicControllerRoute动态映射新路线。这适用于在应用程序运行时添加的页面。

我正在做:

endpoints.MapDynamicControllerRoute<RouteValueTransformer>("{**slug}");

捕获所有尚未分配路由的网址,以便 RouteValueTransformer有需要的可以试试找。通过在 RouteValueTransformer.TransformAsync 中放置一个断点方法,我可以看到它何时运行。如果您只是输入任何无意义的网址,它将按预期进入该方法。对于没有分配路由的 url,但 url 的前面部分有,它不会进入该方法,因为它似乎认为它已经有一个路由,但它显然给出了 404 错误。

例如,如果在上述行之后我做
endpoints.MapControllerRoute(
   name: "test",
   pattern: "category/product1",
   defaults: new { controller = "Home", action = "Index" });

然后尝试浏览到“category/product2”,我认为应该输入TransformAsync尝试查找路线的方法,但它没有,并给出 404。如果您将“类别”更改为其他内容,它将进入该方法。

我不确定这是否是预期的行为、错误,或者我是否使用了“模式”参数错误,或者 {**slug} 错误?

繁殖

很容易重现。创建一个新的 ASP.NET Core 3.1 Web 应用程序。添加
app.UseEndpoints(endpoints =>
{
    var defaults = new { controller = "Home", action = "Index" };
    endpoints.MapControllerRoute(name: "test", pattern: "category/product1", defaults: defaults);
    endpoints.MapDynamicControllerRoute<RouteValueTransformer>("{**slug}");
});

到最后Startup.Configure ,
services.AddSingleton<RouteValueTransformer>();

Startup.ConfigureServices ,

public class RouteValueTransformer : DynamicRouteValueTransformer
{
    public override async ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values)
    {
        return values;
    }
}

并在 return values; 上设置断点看看它什么时候运行。

我还尝试过什么
endpoints.MapDynamicControllerRoute<RouteValueTransformer>("{one}/{two}"); - 也不进入方法。

查看文档。 DynamicRouteValueTransformer上的内容不多(yet)不幸的是,我发现这很困难。

更新

我开始认为这很可能是一个错误,所以我提出了 this Github issue

最佳答案

关于c# - 当 url 的一部分已经是另一个路由时,ASP.NET Core 3.1 中的动态路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59971600/

相关文章:

asp.net-core - 获取 ASP.NET Core 3.0 中所有注册的路由

php - CakePHP 中的本地化路由 : How to redirect to default language

asp.net-mvc - 如何将 "/img/"路由到 ASP.NET MVC 3 中的 "/Content/img"文件夹?

ASP.Net/ASP.NET Core Web API 未经授权的请求返回 302 重定向响应而不是 401

c# - 保护内存中的对称加密 key

c# - System.Collections.Generic.Dictionary = 终极性能?

c# - CheckBox 双向绑定(bind)不起作用

asp.net-core - 环境变量设置但 HostingEnvironment.EnvironmentName 未更新

具有多个子目录的文件的 ASP.NET MVC 路由

c# - 初学者 WCF 问题 - 可消费的异步服务