zoukankan      html  css  js  c++  java
  • 全局的异常捕获过滤器 区分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 看异常信息

    人的本事不是与生俱来的,不是你掌握了多少,而是当你面对一个未知问题的时候,你能用多少时间来掌握!
  • 相关阅读:
    [灵魂拷问]MySQL面试高频100问(工程师方向)
    前后端分离模式下的权限设计方案
    Netty实战:设计一个IM框架
    超实用,Linux中查看文本的小技巧
    Java面试,如何在短时间内做突击
    挑战10个最难回答的Java面试题(附答案)
    SpringBoot是如何动起来的
    Lab_2_SysOps_VPC_Linux_v2.5
    Lab_1_SysOps_Compute_Linux_v2.5
    change-resource-tags.sh
  • 原文地址:https://www.cnblogs.com/dianshen520/p/4349156.html
Copyright © 2011-2022 走看看