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

bus*_*ina 3 routes razor asp.net-core-mvc asp.net-core razor-pages

我正在寻找类似的东西

app.UseEndpoints(endpoints =>
            {
                endpoints.MapDynamicControllerRoute<MyTransformer>($"{store}/{controller}/{action}");
            });
Run Code Online (Sandbox Code Playgroud)

但对于剃刀页面路线。我仔细研究了 AddRazorPagesOptions Conventions,但似乎没有什么突出的。检查了 Github 和谷歌。那里也没有找到太多东西。

bus*_*ina 11

回答我自己的问题。看起来有一个 MapDynamicPageRoute 可以与 Razor Pages 一起使用。您只需使用“页面”键而不是“控制器”和“操作”即可。

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;
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

您还必须使用 MapDynamicPageRoute 注册变压器端点,例如

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