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();
});
这里,ctx
是HttpContext
的实例,它首先用于从DI容器中检索YourContext
的实例,其次用于执行重定向。如果 Maintenance
是 false
,则调用 next
以便将执行传递给下一个中间件组件。
对 Use
的调用将在 Startup.Configure
方法中的 UseMvc
之前进行,以便允许中间件管道短路。请注意,此方法将适用于 controllers/views 以及 Razor Pages - 如果有其他中间件您希望避免在处于维护模式。
在我的一个 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();
});
这里,ctx
是HttpContext
的实例,它首先用于从DI容器中检索YourContext
的实例,其次用于执行重定向。如果 Maintenance
是 false
,则调用 next
以便将执行传递给下一个中间件组件。
对 Use
的调用将在 Startup.Configure
方法中的 UseMvc
之前进行,以便允许中间件管道短路。请注意,此方法将适用于 controllers/views 以及 Razor Pages - 如果有其他中间件您希望避免在处于维护模式。