首页 新闻 会员 周边 捐助

但我在保存时遇到内部异常 值都获取了但就是不能保存

0
悬赏园豆:20 [已解决问题] 解决于 2018-01-22 09:22

保存或者修改时给的提示,但是提示有点笼统 请各位看看 帮忙给个建议

VS2017

问题补充:

这个时控制器ajax  SAVE保存方法

 

这个是js 保存方法

傻傻的鱼的主页 傻傻的鱼 | 初学一级 | 园豆:91
提问于:2018-01-19 11:36
< >
分享
最佳答案
0

ef涉及到数据库里面太多异常需要告知用户是这样的。

    public class HijackErrorFilterAttribute : ExceptionFilterAttribute, IExceptionFilter
    {
        static Exception GetInnerException(Exception ex)
        {
            return ex.InnerException == null ? ex : GetInnerException(ex.InnerException);
        }

        public void OnException(ExceptionContext filterContext)
        {
            string SpliteErrorText(string exceptionString)
            {
                var errorMsg = exceptionString;
                errorMsg = errorMsg.Length > 64 ? errorMsg.Substring(0, 64) : errorMsg;
                var index = errorMsg.IndexOf("");
                errorMsg = index > 0 ? errorMsg.Substring(0, index + 1) : errorMsg;
                errorMsg = errorMsg.ToISO_8859_1();
                return errorMsg;
            }

            switch (filterContext.Exception)
            {
                case DbEntityValidationException ex:
                    var errorContent = new StringBuilder();
                    foreach (var dbEntityValidationResult in ex.EntityValidationErrors) foreach (var error in dbEntityValidationResult.ValidationErrors) errorContent.Append(error.ErrorMessage);
                    var errorMsg = errorContent.ToString();
                    Loger.Log.Info(errorMsg, filterContext.Exception);
                    filterContext.Result = new HttpStatusCodeResult((HttpStatusCode)507, SpliteErrorText(errorMsg));
                    break;
                case InfoException ex:
                    Loger.Log.Info(ex);
                    filterContext.Result = new HttpStatusCodeResult((HttpStatusCode)506, SpliteErrorText(GetInnerException(filterContext.Exception).Message));
                    break;
                default:
                    Loger.Log.Error(filterContext.Exception);
                    filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.InternalServerError, SpliteErrorText(filterContext.Exception.Message));
                    break;
            }
            filterContext.ExceptionHandled = true;
        }

        public override void OnException(HttpActionExecutedContext actionExecutedContext)
        {
            Loger.Log.Error(actionExecutedContext.Exception);
            base.OnException(actionExecutedContext);
        }
    }
收获园豆:15
花飘水流兮 | 专家六级 |园豆:13617 | 2018-01-19 13:14
其他回答(4)
0

提示里说了,让了查看inner exception 。调试,到达发生异常的那行代码时,查看inner exception

西漠以西 | 园豆:1675 (小虾三级) | 2018-01-19 11:44
0

后台出错了,调试代码就知道详细错误了!

Jeffcky | 园豆:2789 (老鸟四级) | 2018-01-19 11:47

好的 谢谢

支持(0) 反对(0) 傻傻的鱼 | 园豆:91 (初学一级) | 2018-01-19 11:48

@傻傻的鱼: 出错地方,try{}catch{}查看详细错误!

支持(0) 反对(0) Jeffcky | 园豆:2789 (老鸟四级) | 2018-01-19 11:49
0

封装的EF.然后在实体里加了属性验证?

收获园豆:5
吴瑞祥 | 园豆:29449 (高人七级) | 2018-01-19 13:37
0

这个后台提示还是debug追踪一下比较好看到问题所在...

站在那看风景 | 园豆:371 (菜鸟二级) | 2018-01-19 16:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册