13

Azure に MVC Web サイトがあります。HTTP 404 を返す必要があるリソースの代わりになるコントローラー アクションを作成しましたが、ボディ コンテンツは、404 の理由を説明する HTML にする必要があります。これは、 を設定する標準アクションとして実装されますResponse.StatusCode。これはローカルでは正常に機能しますが、Azure にデプロイすると、カスタム ビューが表示されず、プレーン テキストのエラー メッセージだけが表示されます。<customErrors>デバッグのために 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 に応答しているときにビューをレンダリングするにはどうすればよいですか?

4

1 に答える 1

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

于 2013-09-22T00:10:44.543 に答える