ASP.NET服务的app_offline.htm文件返回http状态503.这是大多数情况下的正确行为。但是,在请求特定URL的情况下(例如https://www.mywebsite.com/monitor),我想将返回的http状态更改为200,同时在所有其他情况下仍返回http状态503。这可能吗?
我之所以这样做是因为每当我们在我们的网站上进行定期维护时,我们都会使用app_offline.htm文件,但我们不希望我们的正常运行时间监控服务(Pingdom.com)在我们的预定时间内报告停机时间维护。
我认为这必须在IIS级别,因为app_offline.htm在请求处理周期中很早就会得到服务。
答案 0 :(得分:10)
请注意,App_Offline
仅用于将ASP.NET部分关闭,它与IIS站点无关。所有非ASP.NET请求类似.htm-将通过正常的IIS管道。
话虽如此,HTTP 503
是不可用的服务错误。 App_Offline.htm
使网站部分脱机,当网站脱机时,所有ASP.NET请求都会收到503
响应,这是正常且正确的。
使用HttpModule绕过它,或者ASP.NET管道中的任何代码都不是有效的解决方案。
由于您在维护期间已经在IIS根目录中创建/复制App_Offline.htm
,因此我建议您将maintenance.htm
添加为/monitor
文件夹或IIS的默认文档站点并在维护期间在其中创建/复制maintenance.htm
文件:然后,无论ASP.NET站点是否脱机,都将访问默认页面。
如果您的探针在没有指定任何页面的情况下调用http://servername/monitor/
uri,它将起作用。
您只需删除它 - 就像您在维护后删除App_Offline
一样。
答案 1 :(得分:3)
据我所知,app_offline.htm逻辑在ASP.NET 2.0模块中处理,但在任何应用程序加载开始之前(这当然是app_offline.htm * g *背后的想法)。
我建议:
monitor
的虚拟目录添加到(已禁用)网站的根目录,并将其分配给某个IIS可读文件夹。app_offline.htm
文件的副本重命名为default.htm
(或默认文件名列表中的任何内容)到该文件夹中。这样,当访问https://www.mywebsite.com/monitor
时,IIS应该为html文件提供200响应。
啊,为了纪念Adilson对搜索引擎的警告,只需在您的文件中添加<meta name="robots" content="noindex">
,以防搜索引擎访问该网站。
答案 2 :(得分:2)
如果您正在使用IIS 7和集成管道,您仍然可以为不属于ASP.NET管道的请求创建HttpModule,即i / e .Htm请求。
http://learn.iis.net/page.aspx/244/how-to-take-advantage-of-the-iis7-integrated-pipeline/
答案 3 :(得分:0)
您可以处理Global.asax Application_Error方法,识别您的网址,识别您的错误,重定向到您的网页
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
Dim ctx = HttpContext.Current
dim myerror = ctx.Error
If HttpContext.Current.Request.Path = "mypath" Then
HttpContext.Current.Response.Redirect("~/mydestpage.aspx")
End If
End Sub
这将首先返回先前请求的302,然后重定向到显示200 ...
的页面答案 4 :(得分:0)
您可以在IIS级别使用http redirect。
答案 5 :(得分:0)
如果您仍然选择这样做,我认为您应该创建一个HttpModule,并将其放在模块堆栈的顶部。此模块必须测试App_offline.html文件是否存在,如果存在,则测试该请求是否来自站点监视器。在这种情况下,您可以使用200响应,否则,响应代码必须为503以避免错误的站点索引。
重要提示:您的站点应用程序池必须处于集成模式。