【问题标题】:ASP.NET Razor Pages - Conditional redirectionASP.NET Razor 页面 - 条件重定向
【发布时间】:2019-05-10 14:52:37
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    这可以通过一个简单的自定义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 之前进行,以便允许中间件管道短路。请注意,这种方法将适用于控制器/视图以及 Razor 页面 - 如果在处于维护模式的情况下您希望避免使用其他中间件,它也可以放在 Configure 方法的更上方。

    【讨论】:

      【解决方案2】:

      我建议使用 PageFilter。如果您希望在所有页面上都使用此功能,则可以实现 IPageFilter 或 IAsyncPageFilter 并在全局范围内注册它。 如果您需要更多详细信息,我认为您可以查看https://www.learnrazorpages.com/razor-pages/filters

      【讨论】:

        猜你喜欢
        • 2019-02-04
        • 2018-10-21
        • 2018-01-31
        • 1970-01-01
        • 2019-06-22
        • 2021-12-17
        • 2016-04-11
        • 2021-09-27
        相关资源
        最近更新 更多