Ant*_* C. 2 c# asp.net-core asp.net-core-2.0 razor-pages
在我的一个EF实体中,我有一个布尔字段,指示是否要进行维护。
因此,仅当此布尔值设置为true时,我才想将所有页面重新路由到503错误页面。
我可以在每个页面中放入以下代码:
if (_context.SystemParameters.First().Maintenance)
return Redirect("/Error/503");
Run Code Online (Sandbox Code Playgroud)
但这根本不是一件容易的事。是否有最好的方法可以在我的所有页面上实现这种条件重定向?
这可以通过简单的自定义中间件组件来实现,该组件允许甚至在进入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();
});
Run Code Online (Sandbox Code Playgroud)
这里ctx是的实例HttpContext,该实例首先用于YourContext从DI容器中检索的实例,然后用于执行重定向。如果Maintenance为false,next则被调用以将执行传递给下一个中间件组件。
为了允许中间件管道短路,在该方法中Use会先进行此调用。请注意,此方法将适用于控制器/视图以及Razor Pages- 如果在维护模式下还需要避免其他中间件,则也可以将该方法放在方法的更上方。UseMvcStartup.ConfigureConfigure
| 归档时间: |
|
| 查看次数: |
599 次 |
| 最近记录: |