2011-10-24 37 views
2

カスタムエラーページとエラーログを実装するには、この記事に従ってください。ロギングは正常に動作します。ただし、例外が発生した場合、カスタムエラーページはajaxリクエストのために表示されません、通常のHTTPフルリクエストで動作します。カスタムエラーページ、Controller.OnExceptionによるエラーログ、ASP.NET MVC

http://localhost/MyApp/Report/Create/17/、仕事、通常のURL要求

http://localhost/MyApp/Report/CreateUser/17/json、仕事NOT、web.configファイル

<customErrors mode="On"> 

    </customErrors> 

任意のアイデアは非常に高く評価でしょうアヤックス

ASP.NET MVC HandleError Attribute, Custom Error Pages and Logging Exceptions

public class BaseController : Controller 
    { 

protected override void OnException(ExceptionContext filterContext) 
     { 
      base.OnException(filterContext); 

      _log.Error("Error Logging", filterContext.Exception); 

      // Output a nice error page when customErrors's mode = On. 
      if (filterContext.HttpContext.IsCustomErrorEnabled) 
      { 
       filterContext.ExceptionHandled = true;    
       this.View("Error").ExecuteResult(this.ControllerContext); 
      } 
     } 
} 

    public class MvcApplication : System.Web.HttpApplication 
    { 
     public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
     { 
      //Display custom error page using controller.OnException(), HandleErrorAttribute has to be disabled. 
      //filters.Add(new HandleErrorAttribute()); 
     } 

    protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 

      RegisterGlobalFilters(GlobalFilters.Filters); 
      RegisterRoutes(RouteTable.Routes); 


     } 
} 

を使用して。

+0

多分このリンクの回答は役に立ちます:http://stackoverflow.com/questions/1171035/asp-net-mvc-custom-error-handling-application-error-global-asax?answertab=oldest#tab-top –

答えて

0

ブラウザは結果の自動レンダリングを提供しないため、AJAXリクエストは標準のHTML GET \ POSTリクエストとは異なる扱いを受けます。これはバックエンドスタック(ASP.Net MVCに限定されない)に当てはまります。この場合、たとえ応答にエラーページの完全なHTMLが含まれていても(ASP.Net MVCがAJAX呼び出しに対して疑わしい)、ブラウズは自動的にエラーページにリダイレクトされません。
これを実行する方法は例外をキャッチすることですAJAXとクライアント側からエラーページにリダイレクトします。

+0

あなたの助言に感謝します。 mvcアプリケーションが500のステータスコードを返し、UIレイヤーがそれを見ることができ、それに応じてそれを動作させることができますか? – Pingpong

+0

サーバーによって送信される200&300のHttpコードがAJAX呼び出しのコンテキストでエラーとして扱われるものは何もありません。 jQueryなどのフレームワークでは、リダイレクト動作を記述できるAJAXポスト用に定義されたエラーハンドラがあります – Chandermani

関連する問題