簡體   English   中英

當 url 的一部分已經是另一個路由時,ASP.NET Core 3.1 中的動態路由

[英]Dynamic routing in ASP.NET Core 3.1 when part of the url is already another route

我正在嘗試使用DynamicRouteValueTransformerIEndpointRouteBuilder.MapDynamicControllerRoute來動態映射新路由。 這適用於在應用程序運行時添加的頁面。

我正在做:

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

捕獲所有尚未分配路由的 url,以便RouteValueTransformer可以在必要時嘗試找到一個。 通過在RouteValueTransformer.TransformAsync方法中放置一個斷點,我可以看到它何時運行。 如果您只是輸入任何無意義的網址,它將按預期進入該方法。 對於沒有指定的路線,但URL的早期部分使用時,它不會進入方法,因為它似乎認為它已經具備了航線,但后來它顯然給出了一個404錯誤的URL。

例如,如果在上述行之后我做

endpoints.MapControllerRoute(
   name: "test",
   pattern: "category/product1",
   defaults: new { controller = "Home", action = "Index" });

然后嘗試瀏覽到“category/product2”,我認為它應該進入TransformAsync方法來嘗試查找路由,但它沒有,它給出了 404。如果將“category”更改為其他內容,它進入方法。

我不確定這是否是預期的行為、錯誤,或者我是否使用了錯誤的“模式”參數,或者 {**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;上設置斷點return values; 看看它什么時候運行。

我還嘗試過什么

endpoints.MapDynamicControllerRoute<RouteValueTransformer>("{one}/{two}"); - 也不進入方法。

查看文檔。 不幸的是, DynamicRouteValueTransformer (還)沒有太多內容,所以我發現它很困難。

更新

我開始認為它最有可能的錯誤,所以我提出這個問題Github上

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM