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

ASP.NET Razor Pages - Conditional redirection

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

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

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

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

但这一点都不简单。有没有最好的方法在我的所有页面上实现这种条件重定向?

我建议使用 PageFilter。如果你想在你的所有页面上使用它,可以实现一个 IPageFilter 或 IAsyncPageFilter 并在全局注册它。 如果您需要更多详细信息,我想您可以检查 https://www.learnrazorpages.com/razor-pages/filters

这可以通过一个简单的自定义 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 的调用将在 Startup.Configure 方法中的 UseMvc 之前进行,以便允许中间件管道短路。请注意,此方法将适用于 controllers/views 以及 Razor Pages - 如果有其他中间件您希望避免在处于维护模式。