2013-08-17 116 views
12

我有一个关于Azure的MVC网站。我已经写了一个控制器动作来代表资源,它应该返回HTTP 404,但是主体内容应该是一些HTML,我将解释404的原因。这是作为设置Response.StatusCode的标准操作实现的。这在本地运行良好,但是在部署到Azure时,我没有获得自定义视图,而是纯文本中的错误消息。我已经删除了Azure上的<customErrors>进行调试,结果相同。404在Azure网站处理

这是当部署到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

@PKKG这不是重复,这个问题不是关于customErrors(我有customErrors启用,但禁用他们尝试调试问题)。 – driis

+0

对于问题+1。我很想知道如何调试404错误。我想,我有两个建议。您可以在Global.axax文件中使用request_End事件,第二个建议是使用Fiddler。 –

+0

如果我只删除设置状态码的行,我可以得到所需的视图,但显然是200状态码。我得到了来自Fiddler上面的原始响应 – driis

回答