gpt4 book ai didi

c# - MVC 将自定义异常重新抛出为 JSON

转载 作者:太空狗 更新时间:2023-10-29 18:26:51 25 4
gpt4 key购买 nike

我正在从我的 MVC View 调用 Web 服务,并希望在异常抛出时使用 jquery ajax 错误功能。

我正在尝试将自定义创建的异常从我的 MVC 业务层抛出到我的表示层 Controller 中,并将其作为 json 响应重新抛出。

我可以成功抛出我的自定义异常,问题是它以 HTML View 的形式出现。我已经看到声明自定义错误响应的方法,但我希望能够直接将异常重新抛出为 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
}
});

CS

public JsonResult create(MyModel.New details)
{
try
{
Library.insert(details);
return Json(true);
}
catch (Exception ex)
{
throw;
}
}

在此先感谢您的帮助!

最佳答案

我最终找到了合适的解决方案。

对于任何想要对我提出的问题有类似答案的人,我所做的就是声明一个自定义过滤器。其主要部分是将过滤器结果设置为以 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
};
}
}

要引用当前过滤器,只需将错误处理程序属性添加到函数中,如下面第一行所示:

[MyErrorHandler]
public JsonResult create(MyModel.New details)
{
try
{
Library.insert(details);
return Json(true);
}
catch (Exception ex)
{
return Json(ex.Message);
}
}

关于c# - MVC 将自定义异常重新抛出为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25424260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com