正如大多数人所知,如果我在asp.net应用程序的根目录中删除名为app_offline.htm的文件,则会使应用程序脱机as detailed here。
你也会知道,虽然这很好,但是当IIS正在进行时,IIS实际上会返回404代码,而Microsoft不会对它做任何事情as mentioned here。
现在,由于Asp.Net一般是如此可扩展,我认为不应该有一种方法来过度使用这个状态代码来返回503吗?问题是,我不知道从哪里开始寻求改变。
HELP!
答案 0 :(得分:5)
app_offline.htm的处理在ASP.NET管道中是硬编码的,无法修改:请参阅CheckApplicationEnabled()
中的HttpRuntime.cs
,如果它出现非常不可配置的404错误申请被视为离线。
但是,creating your own HTTP module做类似的事情当然是微不足道的 - 在这种情况下,OnBeginRequest处理程序看起来如下所示(显示了HttpHandler的实现,但在HttpModule中的想法完全相同):< / p>
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更加友好,您可以向用户显示一个不错的“我们将会立即返回”页面。
答案 1 :(得分:1)
您可以尝试在web.config中关闭它。
<httpRuntime enable = "False"/>
答案 2 :(得分:1)
您可以通过编写自己的HTTP Handler(实现System.Web.IHttpHandler接口的.NET组件)来实现。
这里有一篇很好的入门文章: link text
答案 3 :(得分:0)
在原始问题的第一个链接中突出显示的app_offline.htm和httpRuntime enable =“False”的优点是不再加载应用程序的应用程序域,这可能是实质性站点更改所需的。对leppie的答案(仍然服务于404)的略微修改是将defaultRedirect添加到另一个网站,这将允许源站点处于关闭状态,然后目标站点将提供简单的503生成页面
web.config源站点
<httpRuntime enable="false" />
<customErrors mode="On" defaultRedirect="/maintainance.aspx"/>
在dest网站中维护.aspx
<%@Page Language="C#"%>
<%
Response.StatusCode = 503;
Response.Write("App offline for maintainance");
%>