在我的一个 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();
});
这里,ctx
是 HttpContext
的实例,它首先用于从 DI 容器中检索 YourContext
的实例,其次用于执行重定向。如果 Maintenance
为 false
,则调用 next
以将执行传递给下一个中间件组件。
在 Startup.Configure
方法中,对 Use
的调用将在 UseMvc
之前进行,以便允许中间件管道短路。请注意,此方法将适用于 Controller / View 以及 Razor 页面 - 如果在以下情况下您希望避免使用其他中间件,则它也可以放置在 Configure
方法中更靠前的位置处于维护模式。
关于c# - ASP.NET Razor Pages - 条件重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53693245/