Этого можно достичь с помощью простого пользовательского компонента 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
, который сначала используется для извлечения экземпляра YourContext
из контейнера DI, а затем для выполнения перенаправления.Если Maintenance
равен false
, next
вызывается для передачи выполнения следующему компоненту промежуточного программного обеспечения.
Этот вызов Use
будет идти до UseMvc
в методе Startup.Configure
для того, чтобы обеспечить возможность короткого замыкания в промежуточном программном обеспечении.Обратите внимание, что этот подход будет применяться к контроллерам / представлениям, а также к Razor Pages - его также можно поместить дальше в метод Configure
, если есть другое промежуточное ПО, которого вы бы хотели избежать в случае нахождения в режиме обслуживания.