首页 后端开发 php教程 关于MVC异常处理的问题及解决实例

关于MVC异常处理的问题及解决实例

Jun 15, 2017 pm 01:45 PM
mvc 异常处理

这篇文章主要为大家详细介绍了MVC异常处理的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

       在日常开发中,我们会去捕捉很多的异常,来进行处理,通常我们的方法就是,在需要进行异常处理的地方加上 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异常处理的问题及解决实例的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

C++ 函数异常与多线程:并发环境下的错误处理 C++ 函数异常与多线程:并发环境下的错误处理 May 04, 2024 pm 04:42 PM

C++中函数异常处理对于多线程环境尤为重要,以确保线程安全和数据完整性。通过try-catch语句,可以在出现异常时捕获和处理特定类型的异常,以防止程序崩溃或数据损坏。

C++ 异常处理如何支持自定义错误处理例程? C++ 异常处理如何支持自定义错误处理例程? Jun 05, 2024 pm 12:13 PM

C++异常处理允许创建自定义错误处理例程,通过抛出异常并使用try-catch块捕捉异常来处理运行时错误。1.创建一个派生自exception类的自定义异常类并覆盖what()方法;2.使用throw关键字抛出异常;3.使用try-catch块捕捉异常并指定可以处理的异常类型。

Java函数中递归调用与异常处理有何关系? Java函数中递归调用与异常处理有何关系? May 03, 2024 pm 06:12 PM

递归调用中的异常处理:限制递归深度:防止堆栈溢出。使用异常处理:使用try-catch语句处理异常。尾递归优化:避免堆栈溢出。

C++ Lambda 表达式如何进行异常处理? C++ Lambda 表达式如何进行异常处理? Jun 03, 2024 pm 03:01 PM

C++Lambda表达式中的异常处理没有自己的作用域,默认不捕获异常。要捕获异常,可以使用Lambda表达式捕获语法,它允许Lambda表达式捕获其定义范围内的变量,从而在try-catch块中进行异常处理。

C++ 技术中的异常处理:如何在多线程环境中正确处理异常? C++ 技术中的异常处理:如何在多线程环境中正确处理异常? May 09, 2024 pm 12:36 PM

在多线程C++中,异常处理遵循以下原则:及时性、线程安全和明确性。实战中,可以通过使用mutex或原子变量来确保异常处理代码线程安全。此外,还要考虑异常处理代码的重入性、性能和测试,以确保其在多线程环境中安全有效地运行。

Java多线程环境下的异常处理 Java多线程环境下的异常处理 May 01, 2024 pm 06:45 PM

多线程环境下异常处理的要点:捕捉异常:每个线程使用try-catch块捕捉异常。处理异常:在catch块中打印错误信息或执行错误处理逻辑。终止线程:无法恢复时,调用Thread.stop()终止线程。UncaughtExceptionHandler:处理未捕获异常,需要实现该接口并指定给线程。实战案例:线程池中的异常处理,使用UncaughtExceptionHandler来处理未捕获异常。

PHP异常处理:通过异常追踪了解系统行为 PHP异常处理:通过异常追踪了解系统行为 Jun 05, 2024 pm 07:57 PM

PHP异常处理:通过异常追踪了解系统行为异常是PHP用于处理错误的机制,由异常处理程序处理异常。异常类Exception代表一般异常,而Throwable类代表所有异常。使用throw关键字抛出异常,并使用try...catch语句定义异常处理程序。实战案例中,通过异常处理捕获并处理calculate()函数可能抛出的DivisionByZeroError,确保应用程序在出现错误时也能优雅地失败。

您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? 您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? Apr 05, 2025 am 12:03 AM

在PHP中,异常处理通过try,catch,finally,和throw关键字实现。1)try块包围可能抛出异常的代码;2)catch块处理异常;3)finally块确保代码始终执行;4)throw用于手动抛出异常。这些机制帮助提升代码的健壮性和可维护性。

See all articles