MVC异常处理详解

发布时间 - 2026-01-11 01:46:42    点击率:

       在日常开发中,我们会去捕捉很多的异常,来进行处理,通常我们的方法就是,在需要进行异常处理的地方加上 try catch 块,但是,如果需要异常处理的地方很多,那么,就会频繁的去写try catch 块,对于我们天生‘懒惰' 的程序员来说,总想找一个捷径。于是,就会有全局异常处理,那么,今天,我们就来看看在MVC中怎么进行全局异常处理的。

一、MVC框架自己的全局异常处理

  在MVC中,框架已经给我们一共了一套全局异常处理的特性类HandleErrorAttribute类。我们可以在MVC中的App_Start文件夹中的FilterConfig.cs文件中找到这么一行代码

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
 {
    filters.Add(new HandleErrorAttribute());
  }

这个就是实例化一个HandleErrorAttribute类,放到过滤器中。然后我们的Views>Shared文件夹中有一个Error.cshtml的页面,其中,该页面里的Model的类型为System.Web.Mvc.HandleErrorInfo,这个是MVC框架已经给我写好了的,我们可以直接拿来用。

在Error.cshtml页面中,我们可以做进一步处理,来显示错误信息,根据需求来展示错误信息。这些错误信息都会在System.Web.Mvc.HandleErrorInfo类中的某些属性中找到的。

例如:一下是Error.cshtml。

我们在Control中,故意写一个异常出来:

public class HomeController : Controller
  {
    public ActionResult Index()
    {
      string i = "12a";
      int j = Convert.ToInt32(i);
      return View();
    }
  }

运行一下,我们来看一下结果。

以上就是运行的结果,我们可以看到,System.Web.Mvc.HandleErrorInfo类还是有很多丰富的属性的,我们可以直接拿来用。

MVC自带的这套异常处理默认的是处理错误码为500系列的异常,如果是404,就不会走这个了。不过,我们可以通过Web.config文件的设置,来进行处理。看我们如何处理的。

首先,我们先将Error.cshtml页补充完整,先给他加一个Control,然后,我们再写一个专门处理404的View和Control。如下

namespace Exception.Controllers
{
  public class SharedController : Controller
  {
    // GET: Shares
    public ActionResult Error()
    {
      return View();
    }

    public ActionResult NotFondError()
    {
      return View();
    }
  }
}

页面:

然后我们在浏览器地址中写一个错误的地址,看一下结果:

二、重写MVC中的异常处理

在开发中,我们经常有这么一个需求,我们需要将异常通过文本日志的方式记录下来并保存,那么MVC自带的异常处理方式System.Web.Mvc.HandleErrorInfo没有这么一个功能,那么我们通过重写的方式来让它有这个功能。下面,我们来看看如何重写。

首先我们建一个类,让这个类继承System.Web.Mvc.HandleErrorInfo,然后重写System.Web.Mvc.HandleErrorInfo中的虚方法:OnException方法。

public class CustomHandleErrorAttribute : HandleErrorAttribute
  {
    public override void OnException(ExceptionContext filterContext)
    {
      base.OnException(filterContext);
      var err = filterContext.Exception.Message;//错误内容
      //=============================
      //将错误记录到日志中
      //=============================
    }
  }

然后,将FilterConfig.cs加入:

public class FilterConfig
  {
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
      filters.Add(new HandleErrorAttribute());
      filters.Add(new CustomHandleErrorAttribute());
    }
  }

这样,我们就可以完成我们的需求了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# MVC  # 异常处理  # asp.net core MVC 全局过滤器之ExceptionFilter过滤器(1)  # Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)实现代码  # 详解使用Spring MVC统一异常处理实战  # springboot springmvc抛出全局异常的解决方法  # ASP.NET MVC异常处理模块详解  # ASP.NET MVC下基于异常处理的完整解决方案总结  # ASP.NET mvc异常处理的方法示例介绍  # 基于SpringMVC的全局异常处理器介绍  # ASP.NET MVC中异常处理&自定义错误页详析  # ASP.NET MVC中异常Exception拦截的深入理解  # 我们可以  # 重写  # 错误信息  # 自带  # 来用  # 自己的  # 的是  # 就会  # 给我  # 中找到  # 夹中  # 有很多  # 给他  # 给我们  # 会在  # 看我  # 可以看到  # 来看看  # 让它  # 看一下 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用美橙互联一键搭建多站合一网站?  开心动漫网站制作软件下载,十分开心动画为何停播?  JS弹性运动实现方法分析  Laravel如何使用Livewire构建动态组件?(入门代码)  如何在云服务器上快速搭建个人网站?  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  浅述节点的创建及常见功能的实现  php json中文编码为null的解决办法  在线制作视频网站免费,都有哪些好的动漫网站?  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  Laravel如何处理文件下载请求?(Response示例)  零基础网站服务器架设实战:轻量应用与域名解析配置指南  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  原生JS获取元素集合的子元素宽度实例  南京网站制作费用,南京远驱官方网站?  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  JavaScript模板引擎Template.js使用详解  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  如何在阿里云购买域名并搭建网站?  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  如何在自有机房高效搭建专业网站?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  微信推文制作网站有哪些,怎么做微信推文,急?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  如何自定义建站之星网站的导航菜单样式?  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  如何解决hover在ie6中的兼容性问题  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  免费网站制作appp,免费制作app哪个平台好?  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  网站建设要注意的标准 促进网站用户好感度!  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  Android 常见的图片加载框架详细介绍  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何快速启动建站代理加盟业务?  北京企业网站设计制作公司,北京铁路集团官方网站?  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  Linux网络带宽限制_tc配置实践解析【教程】  php在windows下怎么调试_phpwindows环境调试操作说明【操作】