正如大多数人所知,如果我在asp.net应用程序的根目录中删除名为app_offline.htm的文件,它将使应用程序脱机 as detailed here. 您还会知道,虽然这很好,但IIS实际上会在此过程中返回404代码,而Mi
您还会知道,虽然这很好,但IIS实际上会在此过程中返回404代码,而Microsoft不会对此进行任何操作as mentioned here.
现在,由于Asp.Net一般是如此可扩展,我认为不应该有一种方法来过度使用这个状态代码来返回503吗?问题是,我不知道从哪里开始寻求改变.
救命!
app_offline.htm的处理在ASP.NET管道中是硬编码的,无法修改:请参阅HttpRuntime.cs中的CheckApplicationEnabled(),如果认为应用程序处于脱机状态,则会抛出非常不可配置的404错误.但是,creating your own HTTP module做类似的事情当然是微不足道的 – 在这种情况下OnBeginRequest处理程序可能看起来如下(显示了HttpHandler的实现,但在HttpModule中的想法完全相同):
Public Sub ProcessRequest(ByVal ctx As System.Web.HttpContext) Implements IHttpHandler.ProcessRequest If IO.File.Exists(ctx.Server.MapPath("/app_unavailable.htm")) Then ctx.Response.Status = "503 Unavailable (in Maintenance Mode)" ctx.Response.Write(String.Format("<html><h1>{0}</h1></html>", ctx.Response.Status)) ctx.Response.End() End If End Sub
当然,这只是一个起点:通过使返回的HTML更友好一点,您也可以向用户显示一个不错的“我们会马上回来”页面.