HandleErrorAttribute
Ajax リクエスト中に発生した例外を処理する独自の属性を作成することで、MVCを拡張しました。その属性は次のとおりです。
public class AjaxAwareHandleErrorAttribute : HandleErrorAttribute
{
public string PartialViewName { get; set; }
public override void OnException(ExceptionContext filterContext)
{
ExceptionHelper.HandleException(filterContext.Exception, false); // custom static class and method
base.OnException(filterContext);
// Use partial view in case of AJAX request
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
var result = new PartialViewResult {ViewName = PartialViewName ?? "~/Views/Errors/DefaultAjaxError.cshtml"};
filterContext.Result = result;
}
}
}
PartialViewName
ご覧のとおり、が nullの場合にはデフォルトの動作があります。これは、Global.asax ファイルにグローバル フィルターとして登録しているためです。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AjaxAwareHandleErrorAttribute());
}
このように設定すると、Ajax 呼び出し中に例外が発生した場合のデフォルトの動作、つまり DefaultAjaxError.cshtml が返されます。カスタム メッセージが必要な場合は、ビューを作成しPartialViewName
、次のようにアクションの属性に直接渡します。
[AjaxAwareHandleError(PartialViewName = "~/Views/Errors/CustomAjaxError.cshtml")]
public ActionResult SomeAjaxControllerAction()
コントローラー アクションで装飾されたコントローラーがある場合の問題はAjaxAwareHandleErrorAttribute
、おそらくグローバルに登録されているため、またメソッド上にあるため、クラス内のコードが 2 回実行されていることです。2回実行されないようにする方法はありますか?
ありがとう。