c# – 如何从自定义异常过滤器返回JSON结果?
发布时间:2020-12-15 18:16:08 所属栏目:百科 来源:网络整理
导读:我想创建一个自定义异常过滤器,它将捕获返回 JSON结果的控制器操作中抛出的异常. 我想重构以下操作方法: public JsonResult ShowContent() { try { // Do some business logic work that might throw a business logic exception ... //throw new Applicati
我想创建一个自定义异常过滤器,它将捕获返回
JSON结果的控制器操作中抛出的异常.
我想重构以下操作方法: public JsonResult ShowContent() { try { // Do some business logic work that might throw a business logic exception ... //throw new ApplicationException("this is a business exception"); var viewModel = new DialogModel { FirstName = "John",LastName = "Doe" }; // Other exceptions that might happen: //throw new SqlException(...); //throw new OtherException(...); //throw new ArgumentException("this is an unhandeled exception"); return Json( new { Status = DialogResultStatusEnum.Success.ToString(),Page = this.RenderPartialViewToString("ShowContent",viewModel) }); } catch (ApplicationException exception) { return Json(new { Status = DialogResultStatusEnum.Error.ToString(),Page = exception.Message }); } catch (Exception exception) { return Json(new { Status = DialogResultStatusEnum.Exception.ToString(),Page = "<h2>PROBLEM!</h2>" }); } } } 我想要做的是创建一个自定义异常过滤器属性,该属性将捕获操作中引发的任何异常,遵循以下逻辑: >检查是否有异常 >不:回来 >如果是BusinessLogic异常 – 返回JSON结果 >记录 解决方法public class YourController : BaseController { public JsonResult showcontent() { // your logic here to return foo json return Json ( new { "dfd" }); // just a dummy return text replace it wil your code } } public class BaseController : Controller { // Catch block for all exceptions in your controller protected override void OnException(ExceptionContext filterContext) { base.OnException(filterContext); if (filterContext.Exception.Equals(typeof(ApplicationException))) { //do json and return } else { // non applictaion exception // redirect to generic error controllor and error action which will return json result } } } 请参阅此链接以了解如何创建和使用HandleError attribute *编辑HandleAttribute for Actions * //not tested code public class HandleErrorfilter : HandleErrorAttribute { public string ErrorMessage { get; set; } public override void OnException(ExceptionContext filterContext) { string message = string.Empty; //if application exception // do something else message = "An error occured while attemting to perform the last action. Sorry for the inconvenience."; } else { base.OnException(filterContext); } } public class YourController : BaseController { [HandleErrorfilter] public JsonResult showcontent() { // your logic here to return foo json return Json ( new { "dfd" }); // just a dummy return text replace it wil your code } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |