[英]Dynamic routing in ASP.NET Core 3.1 when part of the url is already another route
我正在嘗試使用DynamicRouteValueTransformer
和IEndpointRouteBuilder.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.