2013-08-17 228 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

回答