zoukankan      html  css  js  c++  java
  • 自定义Exception:MVC抛出自定义异常,并以Json方式返回

    相关链接

    优点:

      可以统一处理所有页面的异常,对所有需要返回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: '',
                                     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);
                        }
                    });
                }
    

      

      

  • 相关阅读:
    通用权限管理设计 之 数据库结构设计
    jQuery LigerUI 插件介绍及使用之ligerDateEditor
    jQuery LigerUI 插件介绍及使用之ligerTree
    jQuery LigerUI V1.01(包括API和全部源码) 发布
    jQuery liger ui ligerGrid 打造通用的分页排序查询表格(提供下载)
    jQuery LigerUI V1.1.5 (包括API和全部源码) 发布
    jQuery LigerUI 使用教程表格篇(1)
    jQuery LigerUI V1.0(包括API和全部源码) 发布
    jQuery LigerUI V1.1.0 (包括API和全部源码) 发布
    nginx keepalived
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/7660383.html
Copyright © 2011-2022 走看看