Kal*_*exx 14 c# asp.net-mvc json exception-handling
我很困惑如何处理这种情况.
通常,当发生未处理的ASP.Net异常时,服务器会发回某种HTML消息,默认的Asp.Net错误处理程序或自定义错误处理程序.在任何一种情况下,HTML都被发回(通常最好是让页面用户友好).
但是,我遇到了一个问题,即在Asp.net MVC控制器操作中发生未处理的异常,这些操作有望为Ajax调用返回JSON.当javascript读取返回的页面(它是HTML而不是预期的JSON)时,由于无法将响应转换为JSON(现在我正在使用ExtJS)而崩溃.我希望在异常时返回Json,以便可以通知用户发生了错误.
我能想到的唯一解决方案是在返回Json的每个操作中执行以下操作:
try { .... }
catch (Exception ex)
{
return Json(new { success = false, msg = ex.Message });
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢这种方法,因为它需要我捕获所有异常(由于显而易见的原因这是很糟糕的)并且它需要我JsonResult用相同的异常处理代码(这使得以后很难更改)对每个动作进行操作.
是否有更好的方法只返回返回Json的操作方法更合适的错误结果,但仍然保持常规错误页面对非Ajax Web请求用户友好?
ada*_*ord 12
这是我解决这个问题的方法:
public class HandleJsonError : HandleErrorAttribute
{
public override void OnException(ExceptionContext exceptionContext)
{
if (!exceptionContext.HttpContext.Request.IsAjaxRequest() || exceptionContext.Exception == null) return;
exceptionContext.HttpContext.Response.StatusCode = (int) HttpStatusCode.InternalServerError;
exceptionContext.Result = new JsonResult
{
Data = new
{
exceptionContext.Exception.Message,
exceptionContext.Exception.StackTrace
}
};
exceptionContext.ExceptionHandled = true;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7946 次 |
| 最近记录: |