リクエストがJsonで例外が発生した場合、その結果はjsonでなくhtmlになるように、グローバルにエラーを処理する優れた方法を探しています。MVC 3 jsonリクエストは例外時にjsonレスポンスを受け取る必要があります
既存のソリューションまたは自分のビルドの方法に関する情報を探してください。
リクエストがJsonで例外が発生した場合、その結果はjsonでなくhtmlになるように、グローバルにエラーを処理する優れた方法を探しています。MVC 3 jsonリクエストは例外時にjsonレスポンスを受け取る必要があります
既存のソリューションまたは自分のビルドの方法に関する情報を探してください。
一般的な方法の1つは、カスタム例外フィルタを書くことです。そして、単に何らかのアクションを照会してください:
$.getJSON('/someController/someAction', function (result) {
if (!result.success) {
alert(result.error);
} else {
// handle the success
}
});
これはおそらくカスタム属性...おそらくHandleErrorAttribute
のサブクラスで実行可能です。このトリックは、コントローラアクションがJSONを返すかどうかを知る方法です。これは、GetCustomerDetailsJson
のようなメソッド名の後に続くように簡単にすることができます。 Global.asaxの中にグローバルフィルタとして登録することができ
public class MyErrorHandlerAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
filterContext.ExceptionHandled = true;
filterContext.Result = new JsonResult
{
Data = new { success = false, error = filterContext.Exception.ToString() },
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
}
:これを行うには
これはすべての例外に対して実行されませんか? – Dashu
@Dashu、すべての例外に対してはい。また、リクエストがAJAXリクエストであったかどうか、リクエストのコンテンツタイプがapplication/jsonかどうかをテストし、この場合にのみ例外を処理することもできます。 –
良いソリューションのように見える、ありがとうダーリン! – Dashu