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エラー() { リターンビュー(); }