.Net MVC实现全局异常捕捉返回通用异常页面的一种方式

阅文时长

| 0.54分钟
字数统计

| 876字符
主要内容

| 1、引言&背景 2、部分通用设计代码 3、声明与参考资料
『.Net MVC实现全局异常捕捉返回通用异常页面的一种方式』 编写人

| SCscHero
编写时间

| 2022/4/3 PM11:54
文章类型

| 系列
完成度

| 已完成
座右铭

每一个伟大的事业,都有一个微不足道的开始。

一、引言&背景 完成度:100%

a) 应对问题&背景

在最近的EPA扫描中,出现了一个安全漏洞:将异常详细信息、堆栈调用暴露到了前端。如图,也是各位.Neter耳熟能详的,司空见惯的一张图。

那么本文也是分享一种简单的设计方式。当然设计方式有很多种,也有很多设计方式思路都差不多,一通百通。博主就当做一个代码包方便日后复用及分享他人。

b) 应用场景

  • 在发生异常时,将异常详细信息、堆栈调用暴露到了前端。
  • 基于.Net FW MVC技术栈。

c) 分析思路

  1. 新增一个全局异常处理类CustomGlobalErrorAttribute,继承HandleErrorAttribute全场异常处理类,重写OnException方法。加入跳转到异常通用页等逻辑。
  2. 在GlobalFilterCollection类中配置自定义的CustomGlobalErrorAttribute。

二、部分通用设计代码 完成度:100%

a) CustomGlobalErrorAttribute

自定义全局异常处理类CustomGlobalErrorAttribute可如下设计:

    public class CustomGlobalErrorAttribute: HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            base.OnException(filterContext);

            //TODO:处理错误消息。跳转到一个错误也页面

            //TODO:页面跳转到错误页面
            filterContext.HttpContext.Response.Redirect("~/Error.html");
        }
    }

b) 在GlobalFilterCollection中配置

配置如下,一般在Global.asax.cs文件中加入,也可以封装一下:

GlobalFilters.Filters.Add(new CustomGlobalErrorAttribute());

c) 通用Error页代码


        Error.

        An error occurred while processing your request.

三、声明与参考资料 完成度:100%

原创博文,未经许可请勿转载。

如有帮助,欢迎点赞、收藏、关注。如有问题,请评论留言!如需与博主联系的,直接博客私信SCscHero即可。

Original: https://www.cnblogs.com/SCscHero/p/16098195.html
Author: SCscHero
Title: .Net MVC实现全局异常捕捉返回通用异常页面的一种方式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/573274/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 什么是真正的敏捷开发?敏捷开发与瀑布开发有何不同

    什么是真正的敏捷开发?敏捷开发与瀑布开发有何不同。从本质上讲敏捷开发的一个重要目标是建立持续价值交付的能力。这种能力最终必须服务于业务的创新,促进业务的成功。 敏捷开发的目标——更…

    Java 2023年6月8日
    086
  • Android照相机应用

    Android在设计架构的时候,采用了mashup(混搭)的设计理念,也就是说一切都是组建,自己写的是组件,别人提供的也是组件,使用的时候只要符合相关协议就可以把他们当作自己的组件…

    Java 2023年6月7日
    082
  • Mac M1 安装 Nacos 操作及问题解决

    先安装mysql ,这里使用的是8+版本,原因在于原本的 5.7 版本中并没有对 m1 的良好支持,如果启动会有报错说查询不到对应版本信息(虽然可以通过自定义 mirror 实现)…

    Java 2023年6月15日
    0104
  • Sword nginx slab源码解析四(slot块分配)

    void* ngx_slab_alloc(ngx_slab_pool_t* pool, size_t size) { void* p; // 进程&#x…

    Java 2023年5月30日
    066
  • 老徐和阿珍的故事:CAP是什么?超级爱放P吗?

    人物背景:老徐,男,本名徐福贵,从事Java相关研发工作多年,职场老油条,摸鱼小能手,虽然岁数不大但长的比较着急,人称老徐。据说之前炒某币败光了所有家产,甚至现在还有欠债。阿珍,女…

    Java 2023年6月7日
    085
  • MySQL 事务基础知识

    数据库事务概述 事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库始终保持 一致性,同时我们还能…

    Java 2023年6月8日
    076
  • 循环结构(Java)

    基本介绍 while循环语法 while(布尔表达式){&#x…

    Java 2023年6月9日
    066
  • Spring Ioc源码分析系列–容器实例化Bean的四种方法

    Spring Ioc源码分析系列–实例化Bean的几种方法 前言 前面的文章Spring Ioc源码分析系列–Bean实例化过程(二)在讲解到bean真正通…

    Java 2023年6月8日
    0111
  • Future源码一观-JUC系列

    背景介绍 在程序中,主线程启动一个子线程进行异步计算,主线程是不阻塞继续执行的,这点看起来是非常自然的,都已经选择启动子线程去异步执行了,主线程如果是阻塞的话,那还不如主线程自己去…

    Java 2023年6月13日
    084
  • Eureka

    Spring Cloud 服务注册中心 1 注册中心的主要作用 服务注册中心(也称注册中心)是微服务架构非常重要的一个组件,在微服务架构里主要起到了协调者的一个作用。注册中心-般包…

    Java 2023年6月8日
    071
  • 1111111111111111111111关于学习crm项目中的问题总结,也是自己遇到的一些错误的记录 2022/7/6

    bug thymeleaf 共享域对象 如果需要将对象的数据显示到前台页面我们可以通过使用thymeleaf实现这一点,Thymeleaf是一个动态渲染页面用的,他简单易懂,不像j…

    Java 2023年6月8日
    082
  • mybatis报错:java.io.IOException: Could not find resource /resources/mybatis-config.xml

    原因:这个图标的resources目录是根目录,在此目录下的文件直接写文件名即可 Original: https://www.cnblogs.com/CounterX/p/1645…

    Java 2023年6月9日
    0100
  • C字符串和C++中string的区别

    在C++中则把字符串封装成了一种数据类型string,可以直接声明变量并进行赋值等字符串操作。以下是C字符串和C++中string的区别: C字符串 string 对象(C++) …

    Java 2023年6月7日
    080
  • java网络编程(TCP详解)

    网络编程详解-TCP 一,TCP协议的特点面向连接的协议(有发送端就一定要有接收端) 通过三次连接握手建立连接 通过四次握手断开连接 基于IO流传输数据 传输数据大小没有限制 速度…

    Java 2023年6月8日
    0171
  • 【一知半解】零值拷贝

    传统IO 应用调用read方法向操作系统发起读数据的请求,此时由 用户态切换为 内核态 当系统收到读数据请求时,利用DMA控制器把数据从磁盘读取到系统缓存区中(图中2.1) 再然后…

    Java 2023年6月9日
    087
  • 微信公众号分享知识

    欢迎大家关注我的公众号,分享最新的学习知识点,谢谢! Original: https://www.cnblogs.com/yachao1120/p/12416297.htmlAut…

    Java 2023年6月5日
    073
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球