如果托管与IIS的web应用程序,我知道有可以使用的app_offline.htm文件,但我托管在Linux环境中与Apache一个.NET核心的Web应用程序。任何人都知道最安全的做法就是在这种情况下采取的离线应用程序,这样我可以改变我的应用程序而不会破坏任何东西吗?
一个小小的研究之后,我做了什么,应该使用一个ActionFilter服务的“app_offline”的目的。
使用依赖注入,该过滤器发生在我appsettings.json设置一个布尔值,如果设置为true,它的读入动作过滤器和用户重定向到一个“停机维护”页面。这是我的理解是,如果在运行时改变使用的,而不是IOptions IOptionsSnapshot将得到价值。这也是不错的,当你有一个面向公众的网站,但只希望后端应用程序,以防止任何动作,直到已经作了修改和应用程序重新启动。下面是我ActionFilter的一个例子。只是我不喜欢的是,这个过滤器被设置在几乎在每一个应用程序控制器。我喜欢想出的东西,可能在管道进行检查越早,因此,如果任何人有一个更好的方法,我很愿意看到它。
private readonly ServiceSettings _settings;
public ARAppStateAttribute(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);
}