.NET Core Web 应用程序 - app_offline 等效/安全停止 Web 应用程序进行维护

.NET Core Web Application - app_offline equivalent / Safely stop web application for maintenance

如果使用 IIS 托管 Web 应用程序,我知道可以使用 app_offline.htm 文件,但我在 Linux 环境中使用 apache 托管 .NET 核心 Web 应用程序。有谁知道在这种情况下使应用程序脱机最安全的方法是什么,这样我就可以在不破坏任何内容的情况下更改我的应用程序?

编辑:目的是保持网站在线,但在维护任务完成并重新启动应用程序之前阻止登录或 Web 应用程序内的任何交互。

经过一些研究,我通过使用 ActionFilter 做了一些应该服务于 'app_offline' 目的的东西。

使用依赖项注入,此过滤器采用在我的 appsettings.json 中设置的布尔值,如果设置为 true,它将被读入操作过滤器并将用户重定向到 'down for maintenance' 页面。据我了解,如果在运行时发生更改,使用 IOptionsSnapshot 而不是 IOptions 将获得该值。当您有一个面向 public 的网站,但只希望后端应用程序阻止任何操作,直到进行更改并重新启动应用程序时,这也很好。下面是我的 ActionFilter 的示例。我唯一不喜欢的是这个过滤器必须在应用程序中的几乎每个控制器上设置。我更愿意想出一些可以在管道中更快检查的东西,所以如果有人有更好的方法,我很乐意看到它。

private readonly ServiceSettings _settings;

public AppStateAttribute(IOptionsSnapshot<ServiceSettings> options)
{
    _settings = options.Value;
}

public override void OnActionExecuting(ActionExecutingContext context)
{
    if(_settings.AppOffline)
    {
        var redirectOnFail = "/maintenance";

        context.HttpContext.Response.Redirect(redirectOnFail, true);
    }

    base.OnActionExecuting(context);
}