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 看异常信息

    人的本事不是与生俱来的,不是你掌握了多少,而是当你面对一个未知问题的时候,你能用多少时间来掌握!
  • 相关阅读:
    【CV论文阅读】ExtremeC3Net: 使用高级C3模块的极轻量人像分割模型
    【pytorch基础】pytorch的初始化
    【CV基础】如何理解空洞卷积(dilated convolution)?
    关于研发规范化的一些实践和思考
    vuecli入门项目实战
    C/C++用.ico图片替换.exe图标(VS2017)(转)
    C# 多线程修改控件时,提示在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke(转)
    C#读取ACCESS提示“未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序
    ubuntu的常用命令
    C# DataTable 按整形字段排序
  • 原文地址:https://www.cnblogs.com/dianshen520/p/4349156.html
Copyright © 2011-2022 走看看