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

时间:2019-12-13 20:44:40

标签: asp.net-core razor routing asp.net-core-mvc razor-pages

我正在寻找类似的东西

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

但用于剃须刀页面路由。我通过AddRazorPagesOptions约定进行了挖掘,但似乎没有什么脱颖而出的。检查了Github和Google。那里也找不到很多。

1 个答案:

答案 0 :(得分:0)

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

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?}");
});