ASP.NET Razor页面-条件重定向

时间:2018-12-09 14:17:45

标签: c# asp.net-core asp.net-core-2.0 razor-pages

在我的一个EF实体中,我有一个布尔字段,指示是否要进行维护。

因此,仅当此布尔值设置为true时,我才想将所有页面重新路由到503错误页面。

我可以在每个页面中放置以下代码:

if (_context.SystemParameters.First().Maintenance)
    return Redirect("/Error/503");

但这根本不是一件容易的事。是否有最好的方法可以在我的所有页面上实现这种条件重定向?

2 个答案:

答案 0 :(得分:6)

这可以通过简单的自定义Middleware组件来实现,该组件甚至可以在进入MVC管道之前执行所需的逻辑。这是一个示例实现:

app.Use(async (ctx, next) =>
{
    var context = ctx.RequestServices.GetRequiredService<YourContext>();

    if (ctx.Request.Path != "/Error/503" && context.SystemParameters.First().Maintenance)
    {
        ctx.Response.Redirect("/Error/503");
        return;
    }

    await next();
});

在这里,ctxHttpContext的实例,它首先用于从DI容器中检索YourContext的实例,然后用于执行重定向。如果Maintenancefalse,则调用next以便将执行传递给下一个中间件组件。

此调用Use将在UseMvc方法中的Startup.Configure之前进行,以允许中间件管道短路。请注意,此方法将适用于控制器/视图以及Razor页面-如果在维护中还需要避免其他中间件,则也可以将其放在Configure方法中模式。

答案 1 :(得分:1)

我建议使用PageFilter。如果您希望在所有页面上都这样做,则可以实现IPageFilter或IAsyncPageFilter并在全局进行注册。 我认为您可以检查https://www.learnrazorpages.com/razor-pages/filters是否需要更多详细信息