• 全局的异常捕获过滤器 区分ajax请求 与浏览器导航请求


    全局的异常捕获过滤器 区分ajax请求 与浏览器导航请求

    建一个类ExceptionAttribute 继承 HandleErrorAttribute

    重写OnException 方法

    里面代码:

    //1.0日志记录(文本日志和数据库日志)
    //拿到日志
    Exception exe= filterContext.Exception;
    //获取当前exe的最详细信息
    Exception inexe = exe.InnerException==null ? exe:exe.InnerException;
    while (inexe.InnerException!=null)
    {
    inexe = inexe.InnerException;
    }
    //文本日志的缺点:不方便查询和统计
    //数据库日志缺点:一个表的数据量将来会很大,频繁访问数据库(队列)
    //Log4Net.dll组件
    //
    //3.0 将详细异常写入到系统日志中 :大家注意:真正的项目中使用的是日志组件,开源的有Log4Net
    //日志的记录常用的有:1、记住到文本文件中(没有统计意义的,但是量又大的) 2、记录到数据库中(出异常报表一定记录到db中)
    System.IO.File.AppendAllText(filterContext.HttpContext.Server.MapPath("/Logs/Log.txt"), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "=" + inexe.ToString() + " ");
    //其实就是告诉MVC来处理 就会按照web。config 里面跳转views/shared/error.cshtml 所以不能给异步对象 异步对象只能json格式
    //2.0判断当前请求是被ajax请求的还是被浏览器导航请求的
    if (filterContext.HttpContext.Request.IsAjaxRequest())
    {
    //返回json格式
    JsonResult jsonre = new JsonResult();
    jsonre.Data = new { status = 1, msg = inexe.Message };
    jsonre.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
    filterContext.Result = jsonre;
    //告诉mvc我已经处理了异常信息 你不需要处理了
    filterContext.ExceptionHandled = true;
    }
    else
    {
    //告诉mvc导航到错误页面
    filterContext.ExceptionHandled = false;
    }
    base.OnException(filterContext);


    ---------

    MVC自己处理的 base.OnException(filterContext); 就是这个作用

    filterContext 是传给 错误页面的 Model @model HandleErrorInfo

    Web.config 里面设置 开发过程 想看详细异常信息 就
    <customErrors mode="RemoteOnly" 就是出 黄页 内容

    <system.web>
    <customErrors mode="On" defaultRedirect="Error"></customErrors>

    On 不管远程和本地访问 都显示友好页面
    Of 不管远程和本地访问 都显示黄页
    RemoteOnly 远程访问 显示友好页面 本地显示黄页


    在App_Start 里的FilterConfig 里面注册

    filters.Add(new ExceptionAttribute());//注册全局过滤器

    -----
    重点是 看日志 因为 发布后不可能开VS 看异常信息

    人的本事不是与生俱来的,不是你掌握了多少,而是当你面对一个未知问题的时候,你能用多少时间来掌握!
  • 相关阅读:
    单位rem 触屏适配总结
    汉字转拼音插件:LM-PinYin.js
    PngOptimizer PNG压缩工具
    H5微信场景应用 audio模块
    LM_ReadImgMode.js PC单页轮播读图模式组件,零依赖!
    js中的eval方法
    IE6利用iframe遮挡 弹层 select
    H5 video安卓默认点击不能全屏播放解决办法
    JS正则截取两个字符串之间的字符串
    定宽320 缩放适配手机屏幕
  • 原文地址:https://www.cnblogs.com/dianshen520/p/4349156.html
Copyright © 2020-2023  润新知