c# - ASP.NET Razor Pages - 条件重定向

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

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

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

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

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

但这根本不是直截了当的。有没有一种最佳方法可以在我的所有页面上实现这种条件重定向?

最佳答案

这可以通过简单的自定义来实现 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 以将执行传递给下一个中间件组件。

Startup.Configure 方法中,对 Use 的调用将在 UseMvc 之前进行,以便允许中间件管道短路。请注意,此方法将适用于 Controller / View 以及 Razor 页面 - 如果在以下情况下您希望避免使用其他中间件,则它也可以放置在 Configure 方法中更靠前的位置处于维护模式。

关于c# - ASP.NET Razor Pages - 条件重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53693245/

相关文章:

c# - 使用 linq 创建属于另一个类的对象列表

c# - ASP.Net WebAPI 从 MediaTypeFormatter 内部获取当前 Controller 名称

C# WinForms ErrorProvider 控件

c# - WebDav 如何检查文件夹是否存在?

c# - 如何在 Linux 上生成一个新的基于 .xproj 的 .NET Core 项目?

c# - JwtSecurityToken 过期时间无效 .NET Core 3.1

iis - 在安装了 Core 2.1 的 IIS 10 服务器上,针对 Core 2.1 构建的 ASP.NET Core 应用程序失败

c# - IHttpContextAccessor 在类中为 null

asp.net-core - 在 ASP.Net Core 中将 swashbuckle swagger 与 odata 集成

visual-studio-2017 - 在 Web 项目中引用类库 .Net Standard 2.0 时,Dotnet core2 Intellisense 被破坏