C#MVC(Ajaxリクエストを含む)のApplication_Errorグローバルエラー処理

Global.asaxののApplication_Error MVCの中のグローバルエラー処理。

リクエストオブジェクトの作成がまだ来て、エラーの場合、この時間== Context.Handlerのヌル

それが決定されたAjaxリクエスト、我々はJSON文字列オブジェクトを返します。Ajaxは要求でない場合は、表示されるエラーページに移動します。

///  <要約> 
/// 全局错误
 ///  </要約> 
///  ます。<param name = "差出人"> </ param>の
///  <PARAM NAME = "E"> </ param>の
保護 のボイド Application_Error(オブジェクト送信者、のEventArgs電子)
{ 
    例外EX = Server.GetLastError()。
    LogHelper.Error(EX); // 记录错误日志(NLog挺好用的(*)))

    であれば(Context.Handler == NULL 
    { 
        リターン
    } 

    であれば新しいHttpRequestWrapper(要求).IsAjaxRequest())
    { 
        Response.Clear()。 
        応答。ContentTypeを = " ファイルアプリケーション/ JSON;のcharset = UTF-8 " ; 
        Response.Writeを(" {\"状態\ "\" 0 \ "\" MSG \ "\" " + ex.Message + " \ "} " ); 
        Response.Flush(); 
        Response.Endの(); 
    } 
    
    { 
        // 実施例Aリダイレクトエラーページに、単純なエラー取る
         // 文字列errurl = "/エラー/エラーMSG =" + ex.Message;
         // のResponse.Redirect(trueにerrurl、); 

        // オプションIIバンドのエラーオブジェクト、エラーページに行く
        Response.Clear();
        RouteData routeData = 新しいRouteData();
        routeData.Values.Add(" コントローラ"" エラー"); // 既存のコントローラエラー 
        routeData.Values.Add(" アクション"" エラー"); // カスタムエラーページ

        Server.ClearErrorという() ; 
        コントローラ内のErrorController = 新しい新規でのErrorController(); 
        HandleErrorInfo handleErrorInfo = 新しい新しい HandleErrorInfo(EX、" エラー"" エラー" ); 
        Controller.ViewData。モデル = handleErrorInfo。
        ((IController)コントローラ).Execute(新しい RequestContextの(新しいHttpContextWrapper(((MvcApplication)送信者).Context)、routeData))。
    } 
}

オプションIIオブジェクトの使用法、およびデフォルトのエラーページ(すなわち/Shared/Error.cshtml)と同じ。我々は、web.configファイルのエラーページにエラーに対処していない場合は/Shared/Error.cshtmlに設定することができます。

Error.cshtmlコード:

@model System.Web.Mvc.HandleErrorInfo 
@ { 
    ViewBag.Title = "系统错误"。
    レイアウト= "〜/ビュー/共有/ _Layout.cshtml"; 
} 

< h3のクラス= "テキスト-危険" >系统错误</ H3 > 
@If(モデル!= NULL)
{ 
    < スパンクラス= "テキスト警告" > @(Model.Exception.Message)</ スパン> 
} 
{ 
    < スパンクラス= "テキスト警告" >处理请求时出错。</ スパン> 
}

スキームIIアクションコード:

公共のActionResultエラー()
{ 
    リターンビュー(); 
}

おすすめ

転載: www.cnblogs.com/miaolin/p/12171569.html