在Azure网站中处理404

时间:2013-08-17 17:34:05

标签: asp.net-mvc asp.net-mvc-3 azure

我在Azure上有一个MVC网站。我已经写了一个控制器动作来代替一个资源,它应该返回HTTP 404,但是正文内容应该是一些HTML,我在那里解释404的原因。这是作为设置Response.StatusCode的标准动作实现的。这在本地工作正常,但是当部署到Azure时,我不会获得我的自定义视图,而只是纯文本中的错误消息。我已经删除了Azure上的<customErrors>以进行调试,结果相同。

这是部署到Azure时收到的原始响应:

HTTP/1.1 404 Not Found
Cache-Control: private
Content-Length: 103
Content-Type: text/html
Server: Microsoft-IIS/8.0
X-AspNetMvc-Version: 3.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
X-Powered-By: ARR/2.5
X-Powered-By: ASP.NET
Date: Sat, 17 Aug 2013 17:24:19 GMT

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.

同样重要的是,如果我删除了服务于此的路由,我会得到一个标准的.NET 404错误页面,所以我想我的自定义操作正在运行。行动很简单:

    [HttpGet]
    public ActionResult LegacyMedia(string originalUrl)
    {
        ViewBag.OriginalUrl = originalUrl;
        return new ViewResult404() {ViewName = "LegacyMedia"};
    }

    public class ViewResult404 : ViewResult
    {
        public override void ExecuteResult(ControllerContext context)
        {
            context.HttpContext.Response.StatusCode = (int) HttpStatusCode.NotFound;
            base.ExecuteResult(context);
        }
    }

如何在Azure上响应HTTP状态404时呈现我的视图?

1 个答案:

答案 0 :(得分:29)

我能够通过将此httpErrors条目添加到web.config来解决此问题:

<configuration>  
  <system.webServer>  
    <httpErrors existingResponse="PassThrough"/>  
  </system.webServer>  
<configuration>

我在这里找到了这个答案:

http://blog.dezfowler.com/2010/09/aspnet-custom-error-not-shown-in-azure.html