Cya*_*sin 8 c# asp.net asp.net-mvc jquery json.net
我从我的MVC视图调用Web服务,并希望在异常抛出时使用jquery ajax错误功能.
我试图将自定义创建的异常从我的MVC业务层抛出到我的表示层控制器中,并将其重新抛出为json响应.
我可以成功抛出自定义异常,问题在于它是否为HTML视图.我已经看到了声明自定义错误响应的方法,但我希望能够直接将该异常重新抛出为JSON.
有任何想法吗?
使用Javascript:
$.ajax({
type: "POST",
url: 'create',
data: "{userDetails:" + JSON.stringify(details) + "}",
contentType: "application/json; charset=utf-8",
success: function (data) {
data = data.d;
redirectSuccess();
},
error: function(err) {
//display thrown exception here
}
});
Run Code Online (Sandbox Code Playgroud)
CS
public JsonResult create(MyModel.New details)
{
try
{
Library.insert(details);
return Json(true);
}
catch (Exception ex)
{
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!
我最终找到了合适的解决方案.
对于想要对我问的问题做出类似回答的人,我所做的就是声明一个自定义过滤器.这个主要部分是将过滤结果设置为以JSON形式返回,但即使这样,它也会在jquery ajax调用中返回成功,因为它返回状态200,jquery ajax读取为成功.
Jquery ajax读取200之外的任何状态作为错误,因此您可以看到我将状态代码更改为我创建并将记录的自定义数字,因此jquery ajax看到错误并将其抛出到ajax错误.
public class MyErrorHandlerAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
filterContext.HttpContext.Response.StatusCode = 11001;
filterContext.ExceptionHandled = true;
filterContext.Result = new JsonResult
{
Data = new { success = false, error = filterContext.Exception.ToString() },
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
}
}
Run Code Online (Sandbox Code Playgroud)
要引用当前过滤器,只需将错误处理程序属性添加到函数中,如下面第一行所示:
[MyErrorHandler]
public JsonResult create(MyModel.New details)
{
try
{
Library.insert(details);
return Json(true);
}
catch (Exception ex)
{
return Json(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7538 次 |
最近记录: |