有没有办法使用 Razor Pages 进行动态路由?

Is there a way to do dynamic routing with Razor Pages?

我正在寻找类似

的东西
app.UseEndpoints(endpoints =>
            {
                endpoints.MapDynamicControllerRoute<MyTransformer>($"{store}/{controller}/{action}");
            });

但对于剃刀页面路由。我挖掘了 AddRazorPagesOptions 约定,但似乎没有什么突出的。检查 Github 和 Google。也没有找到太多。

回答我自己的问题。看起来有一个适用于 Razor Pages 的 MapDynamicPageRoute。您只需要使用 "page" 键而不是 "controller" 和 "action".

public class MyTransformer : DynamicRouteValueTransformer
{
    public MyTransformer()
    {

    }

    public override async ValueTask<RouteValueDictionary> TransformAsync(HttpContext
           httpContext, RouteValueDictionary values)
    {
        return await Task.Run(() =>
        {
            var rng = new Random();
            if (rng.NextDouble() < 0.5)
            {
                values["page"] = "/MyRazorPageA";
            }
            else
            {
                values["page"] = "/MyRazorPageB";
            }


            return values;
        });
    }
}

您还必须使用 MapDynamicPageRoute 注册转换器端点,例如

app.UseEndpoints(endpoints =>
{
    endpoints.MapRazorPages();
    endpoints.MapDynamicPageRoute<MyTransformer>("rando/{path?}");
});