分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

MVC抛出自定义异常,并易Json方式返回

发布时间:2023-09-06 01:17责任编辑:郭大石关键词:MVC

相关链接

优点:

  可以统一处理所有页面的异常,对所有需要返回json数据的异常,都用同样的方法throw new DVMException()。页面展示,controller的错误处理方式一样

  节省编码时间,不用针对每一个controller编写错误json

  throw new DVMException()可以不仅出现在调用层级更深的其他方法中

  编码格式统一

自定义Exception:

 ???/// <summary> ???/// NewCRM异常 ???/// </summary> ???public class DVMException : Exception ???{ ???????/// <summary> ???????/// 操作结果 ???????/// </summary> ???????public OPResult Result { get; set; } ???????/// <summary> ???????/// 构造函数 ???????/// </summary> ???????/// <param name="opr">操作结果</param> ???????/// <param name="message">消息内容</param> ???????public DVMException(OPResult opr, String message) ???????????: base(message) ???????{ ???????????Result = opr; ???????} ???????/// <summary> ???????/// 构造函数 ???????/// </summary> ???????/// <param name="opr">返回代码</param> ???????/// <param name="message">错误消息</param> ???????/// <param name="e">原始异常</param> ???????public DVMException(OPResult opr, String message, Exception e) ???????????: base(message, e) ???????{ ???????????Result = opr; ???????} ???????/// <summary> ???????/// 构造函数 ???????/// </summary> ???????/// <param name="message">消息内容</param> ???????/// <param name="e">异常栈</param> ???????public DVMException(String message, Exception e) ???????????: base(message, e) ???????{ ???????????Result = OPResult.ServerError; ???????} ???????/// <summary> ???????/// 构造函数 ???????/// </summary> ???????/// <param name="e">异常堆栈</param> ???????public DVMException(Exception e) ???????????: base("Server Operation Failed", e) ???????{ ???????????Result = OPResult.ServerError; ???????} ???} ???/// <summary> ???/// 操作结果 ???/// </summary> ???public class DVMOPResult ???{ ???????/// <summary> ???????/// 操作是否成功 ???????/// </summary> ???????public Boolean OPSucess { get; set; } ???????/// <summary> ???????/// 结果代码 ???????/// </summary> ???????public OPResult OPCode { get; set; } ???????/// <summary> ???????/// 操作结果,类型可变,由Type进行判断 ???????/// </summary> ???????public Object ResultContent { get; set; } ???????/// <summary> ???????/// 返回类型名称 ???????/// </summary> ???????public String Type { get; set; } ???????/// <summary> ???????/// 返回是否为数组 ???????/// </summary> ???????public Boolean IsArray { get; set; } ???}

  

自定义HandleErrorAttribute

 ????public class HandleJsonExceptionAttribute:HandleErrorAttribute ???{ ????????public override void OnException(ExceptionContext filterContext) ???????{ ???????????var logger = IocFactory.Instance.GetInstance<ILogBase>(); ???????????var exception = filterContext.Exception; ???????????var url = filterContext.HttpContext.Request.RawUrl; ???????????String message = exception.Message; ???????????logger.Error(String.Format("Request error on url {0}: {1}", url, message), exception); ???????????JsonResult jsonResult = new JsonResult() { MaxJsonLength = Int32.MaxValue }; ???????????jsonResult.Data = message; ???????????filterContext.Result = jsonResult; ???????????filterContext.ExceptionHandled = true; ???????} ???}

controller中使用:[HandleJsonException]

 ???????[HttpPost] ???????[HandleJsonException] ???????public ActionResult Save(SaveAccountRequest request) ???????{ ???????????var accountDTO = request as AccountDTO; ???????????FixRatePost(ref accountDTO); ???????????request.UserId = this.CurrentUser.UserId; ???????????var id =_accountService.SaveAccount(request); ???????????if (id < 0) ???????????{ ???????????????throw new DVMException(OPResult.ServerError, "此账户已存在并启用,无法重复创建"); ???????????} ???????????return new JsonResult { Data = true }; ???????}

  

View展示异常:ajax的error处理

 ????????postCreation: function (successMessage) { ???????????????$.ajax({ ???????????????????data: $("form").serialize(), ???????????????????url: "@Url.Content("~/Account/Save")", ???????????????????type: ‘POST‘, ???????????????????dataType: ‘json‘, ???????????????????cache: false, ???????????????????success: function (data) { ???????????????????????if (data.toString() == "true") { ???????????????????????????$.Dialog({ ???????????????????????????????overlay: true, ???????????????????????????????shadow: true, ???????????????????????????????flat: false, ???????????????????????????????icon: ‘‘, ???????????????????????????????width: 330, ???????????????????????????????content: ‘<div class="" style="text-align:left;padding:10px;font-size:16px;">‘ + successMessage + ‘</div>‘ ???????????????????????????????????????+ ‘<div class="size4 text-right">‘ ???????????????????????????????????????????+ ‘<button class="warning" id="comfirm"><i class="icon-checkmark on-left"></i>关闭</button> ‘ ???????????????????????????????????????+ ‘</div>‘, ???????????????????????????????overlayClickClose: false, ???????????????????????????????onShow: function (_dialog) { ???????????????????????????????????$("#comfirm", $(_dialog)).click(function () { ???????????????????????????????????????//保存成功返回列表页 ???????????????????????????????????????$("#cancel").click(); ???????????????????????????????????}) ???????????????????????????????} ???????????????????????????}); ???????????????????????} else { ???????????????????????????showAlert(data); ???????????????????????}; ???????????????????????freezeButton(false); ???????????????????}, ???????????????????error: function (data) { ???????????????????????showAlert(data); ???????????????????????freezeButton(false); ???????????????????} ???????????????}); ???????????}

  

  

MVC抛出自定义异常,并易Json方式返回

原文地址:http://www.cnblogs.com/panpanwelcome/p/7660383.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved