我正在尝试在MVC 3上设置自定义维护页面,但特别是在Azure上。基本上为了保持SEO友好我需要返回503(服务不可用)。所有其他自定义错误页面都遵循通常的
在Azure中运行(例如404)<customErrors mode="On">
<error statusCode="404" redirect="404.htm"/>
<error statusCode="503" redirect="503.htm"/>
</customErrors>
404页面有效但503没有被跟踪,我只是得到一个丑陋的服务不可用页面。通过error.cshtml和标准HandleErrorAttribute,我有500错误正常工作。
我甚至尝试使用以下
从ActionFilter返回我自己的ActionResultpublic class SiteDownForTestingResult : ActionResult
{
public SiteDownForTestingResult() : base()
{
}
public override void ExecuteResult(ControllerContext context)
{
var path = System.Web.Hosting.HostingEnvironment.MapPath("~/app_testing.htm");
var response = context.HttpContext.Response;
response.Clear();
response.StatusCode = (int)HttpStatusCode.ServiceUnavailable;
response.StatusDescription = "Service Unavailable.";
response.WriteFile(path);
response.End();
}
}
app_testing是我的自定义页面,然后从ActionFilter的OnActionExecuting设置filterContext.Result = new SiteDownForTestingResult();
,我仍然受到普通503'服务不可用'页面的欢迎
这是否与Azure上的application.config有关,锁定了一些我不知道的东西。这在IIS7和我的本地机箱上工作正常,但是模拟器和云都没有给人带来欢乐。
任何帮助都将不胜感激。
答案 0 :(得分:1)
基于我的理解,自定义503错误是直接从https.sys生成的,主要是当应用程序池不可用时。现在,当没有应用程序池时,您的设置无法在您的自定义错误设置中运行,将特定于应用程序池。此外,大多数搜索引擎依赖于503错误代码作为回报,因此正确显示搜索结果,这就是为什么通常不会在应用程序级别进行此错误的自定义。
当您引用Windows Azure模拟器时,我相信您使用的是Windows Azure Web角色。使用Windows Azure Web角色,您可以在启动任务中使用AppCmd.exe自定义IIS,这是您的最高自定义级别。您无法在Windows Azure中达到HTTP.sys自定义级别,因此自定义503错误可能无法在Windows Azure上运行。