在ASP.NET应用程序中管理维护页面重定向

时间:2011-08-27 17:34:12

标签: asp.net redirect web-config global-asax

我想在.config文件中使用这样的配置:

<appSettings>
  <add key="SiteIsActive" value="false"/>
  <add key="SiteNonActive_RedirectTo" value="UnderMaintainance.aspx"/>
</appSettings>

因此,当设置设置为false值时,系统会自动将每个请求重定向到维护页面。

我尝试这样做:使用Global.asax的Application_BeginRequest:

protected void Application_BeginRequest(object sender, EventArgs e) {
  if ((bool)System.Configuration.ConfigurationManager.AppSettings["SiteIsActive"])
    if (this.Request.Path.IndexOf(
       System.Configuration.ConfigurationManager.AppSettings["SiteNonActive_RedirectTo"]) == -1)
      this.Response.Redirect(
      System.Configuration.ConfigurationManager.AppSettings["SiteNonActive_RedirectTo"]);
}

基本上它可以工作,但是当以这种方式重定向时,firefox会向我显示没有应用任何图像或样式的页面......很奇怪,我看一下浏览器下载的页面源,一切都在那里!

这是实现目标的正确方法吗? 我做错了吗?

三江源

PS:Internet Explorer的行为与firefox不同,它正确显示了重定向的页面。

PS2:你们正确地告诉我,有一个名为App_Offline的功能可用。好吧,我不想使用它有一个原因:我想使用我的维护页面不仅要显示一个状态,还要显示更多状态,例如:

1)维持

<appSettings>
  <add key="SiteIsActive" value="false"/>
  <add key="SiteNonActive_RedirectTo" value="UnderMaintainance.aspx?S=Maintainance"/>
</appSettings>

2)正在建设中

<appSettings>
  <add key="SiteIsActive" value="false"/>
  <add key="SiteNonActive_RedirectTo" value="UnderMaintainance.aspx?S=UnderConstr"/>
</appSettings>

3)暂时不活动

<appSettings>
  <add key="SiteIsActive" value="false"/>
  <add key="SiteNonActive_RedirectTo" value="UnderMaintainance.aspx?S=TempInact"/>
</appSettings>

App_Offline不会给我这个。

1 个答案:

答案 0 :(得分:7)

这是一种更简单的方法,它使用了一个名为App_Offline.htm的特殊页面。

了解更多信息:

  

App_Offline.htm - by Scott Guthrie

您可能还想阅读Scott关于IE6问题的跟进:

  

App_Offline.htm and working around the "IE Friendly Errors" feature

不使用时只需将其重命名为App_offline.disabled,然后在需要维护时将其重命名为App_Offline.htm

这种方法的另一个理由是,如果你的&#34;维护&#34;包括部署网站或修改web.config,您的UnderMaintainance.aspx页面可能无法执行,因为您的网站在上传时会处于不稳定状态。或者,您可能犯了一个错误并覆盖了这些&#34;维护&#34; web.config中的值。

App_Offline.htm非常棒,因为这意味着你可以真正搞砸你的部署,没有人会知道。