返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >ASP.NETMVC异常过滤器用法
  • 482
分享到

ASP.NETMVC异常过滤器用法

2024-04-02 19:04:59 482人浏览 薄情痞子
摘要

我们平常在程序里面为了捕获异常,会加上try-catch-finally代码,但是这样会使得程序代码看起来很庞大,在mvc中我们可以使用异常过滤器来捕获程序中的异常,如下图所示:

我们平常在程序里面为了捕获异常,会加上try-catch-finally代码,但是这样会使得程序代码看起来很庞大,在mvc中我们可以使用异常过滤器来捕获程序中的异常,如下图所示:

使用了异常过滤器以后,我们就不需要在Action方法里面写Try -Catch-Finally这样的异常处理代码了,而把这份工作交给HandleError去做,这个特性同样可以应用到Controller上面,也可以应用到Action方面上面。

注意:

使用异常过滤器的时候,customErrors配置节属性mode的值,必须为On。

演示示例:

1、Error控制器代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.WEB;
using System.Web.Mvc;
using System.Data.sqlClient;
using System.IO;

namespace _3_异常过滤器.Controllers
{
    public class ErrorController : Controller
    {
        // GET: Error
        [HandleError(ExceptionType =typeof(ArithmeticException),View ="Error")]
        public ActionResult Index(int a,int b)
        {
            int c = a / b;
            ViewData["Result"] = c;
            return View();
        }

        /// <summary>
        /// 测试数据库异常
        /// </summary>
        /// <returns></returns>
        [HandleError(ExceptionType = typeof(SqlException), View = "Error")]
        public ActionResult DbError()
        {
            // 错误的连接字符串
            SqlConnection conn = new SqlConnection(@"Initial Catalog=StudentSystem; Integrated Security=False;User Id=sa;PassWord=******;Data Source=127.0.0.1");
            conn.Open();
            // 返回Index视图
            return View("Index");
        }

        /// <summary>
        /// IO异常
        /// </summary>
        /// <returns></returns>
        [HandleError(ExceptionType = typeof(IOException), View = "Error")]
        public ActionResult IOError()
        {
            // 访问一个不存在的文件
            System.IO.File.Open(@"D:\error.txt",System.IO.FileMode.Open);
            // 返回Index视图
            return View("Index");
        }
    }
}

2、路由配置如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace _3_异常过滤器
{
    public class RouteConfig
    {
        public static void ReGISterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

            // 新增路由配置
            routes.MapRoute(
              name: "Default2",
              url: "{controller}/{action}/{a}/{b}",
              defaults: new { controller = "Home", action = "Index", a=0,b=0 }
          );
        }
    }
}

3、配置文件如下:

<system.web>
    <compilation debug="true" targetFramework="4.6.1" />
    <HttpRuntime targetFramework="4.6.1" />
    <httpModules>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.ai.Web" />
    </httpModules>
    <!--customErrors配置节mode的属性值必须为On-->
    <customErrors mode="On">    
    </customErrors>
</system.web>

4、运行结果

URL:http://localhost:21868/error/index/8/4

结果:

URL:http://localhost:21868/error/index/8/0

结果:

URL:http://localhost:21868/error/DbError

结果:

URL:http://localhost:21868/error/IOError

结果:

在同一个控制器或Action方法上可以通过HandleError处理多个异常,通过Order属性决定捕获的先后顺序,但最上面的异常必须是下面异常的同类级别或子类。如下图所示:

上面的程序可以修改成如下的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.SqlClient;
using System.IO;

namespace _3_异常过滤器.Controllers
{
    [HandleError(Order =1, ExceptionType = typeof(SqlException), View = "Error")]
    [HandleError(Order =2, ExceptionType = typeof(IOException), View = "Error")]
    [HandleError(Order =3)] //不指定View,默认跳转到Share下面的Error视图
    public class ErrorController : Controller
    {
        public ActionResult Index(int a,int b)
        {
            int c = a / b;
            ViewData["Result"] = c;
            return View();
        }

        /// <summary>
        /// 测试数据库异常
        /// </summary>
        /// <returns></returns>
        public ActionResult DbError()
        {
            // 错误的连接字符串
            SqlConnection conn = new SqlConnection(@"Initial Catalog=StudentSystem; Integrated Security=False;User Id=sa;Password=******;Data Source=127.0.0.1");
            conn.Open();
            // 返回Index视图
            return View("Index");
        }

        /// <summary>
        /// IO异常
        /// </summary>
        /// <returns></returns>
        public ActionResult IOError()
        {
            // 访问一个不存在的文件
            System.IO.File.Open(@"D:\error.txt",System.IO.FileMode.Open);
            // 返回Index视图
            return View("Index");
        }
    }
}

在上面的示例中,捕获异常的时候只是跳转到了Error视图,如果我们想获取异常的具体信息该怎么办呢?如下图所示:

查看MVC源码,可以发现HandleError返回的是HandleErrorInfo类型的model,利用该model可以获取异常的具体信息,修改Error视图页面如下:

结果:

到此这篇关于asp.net MVC异常过滤器用法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: ASP.NETMVC异常过滤器用法

本文链接: https://lsjlt.com/news/141770.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • ASP.NETMVC异常过滤器用法
    我们平常在程序里面为了捕获异常,会加上try-catch-finally代码,但是这样会使得程序代码看起来很庞大,在MVC中我们可以使用异常过滤器来捕获程序中的异常,如下图所示: ...
    99+
    2024-04-02
  • ASP.NETMVC自定义异常过滤器
    一、异常过滤器 异常筛选器用于实现IExceptionFilter接口,并在ASP.NET MVC管道执行期间引发了未处理的异常时执行。异常筛选器可用于执行诸如日志记录或显示错误页之...
    99+
    2024-04-02
  • ASP.NETMVC缓存过滤器用法
    缓存过滤器用来输出页面缓存,其用法如下图所示: 注意: Duration:表示缓存多少秒;VaryByParam:表示缓存是否随地址参数而改变。OutputCache除了可以定义在...
    99+
    2024-04-02
  • ASP.NETMVC自定义授权过滤器
    目录一、授权过滤器二、示例1、添加对应实体类2、添加测试数据3、新建继承类4、添加Account控制器5、修改配置文件6、添加授权控制器三、测试测试Welcome四、总结一、授权过滤...
    99+
    2024-04-02
  • ASP.NETMVC过滤器执行顺序介绍
    如果某个Action过滤器运用了多种过滤器,那么过滤器的执行顺序是如何呢? 规则一:不同类型的过滤器有一个先后顺序 即执行顺序是:授权过滤器->动作过滤器->结果过滤器...
    99+
    2024-04-02
  • C#中如何使用异常过滤器和异常处理
    C#中如何使用异常过滤器和异常处理,需要具体代码示例异常是在程序运行过程中出现的错误或意外情况。在C#中,异常是通过抛出和捕获来处理的。异常处理是保证程序正常运行的关键部分。在C#中,异常过滤器和异常处理是处理异常的两种常见方式。异常过滤器...
    99+
    2023-10-22
    异常处理 异常过滤器 C#语言
  • C#中如何使用异常过滤器处理特定异常
    C#中如何使用异常过滤器处理特定异常异常处理是开发过程中不可或缺的一部分。当程序出现异常时,能够准确定位并处理异常,是保证程序稳定性和可靠性的重要环节之一。C#提供了异常过滤器(Exception Filter)的机制,可以根据需求选择性地...
    99+
    2023-10-22
    C# 特定异常处理 异常过滤器
  • ASP.NET MVC自定义异常过滤器使用案例
    目录一、需求二、案例1、创建工具类1.1、创建日志工具类1.2、创建网络工具类2、创建自定义异常类3、创建控制器4、测试在上一篇文章中讲解了自定义异常过滤器,这篇文章会结合工作中的真...
    99+
    2024-04-02
  • tomcat启动过滤器异常如何解决
    要解决Tomcat启动过滤器异常,可以按照以下步骤进行操作:1. 检查过滤器配置:检查web.xml文件中的过滤器配置是否正确。确保...
    99+
    2023-09-14
    tomcat
  • tomcat启动过滤器异常怎么解决
    如果Tomcat启动时出现过滤器异常,可以尝试以下几种解决方法:1. 检查过滤器配置:查看web.xml文件或者注解配置,确认过滤器...
    99+
    2023-08-19
    tomcat
  • Wireshark常用过滤使用方法
    Wireshark是一款用于网络分析的工具,常用于捕获和分析网络数据包。以下是Wireshark常用的过滤使用方法:1. IP地址过...
    99+
    2023-09-13
    Wireshark
  • 详解Tomcat常用的过滤器
    目录一、跨域过滤器CorsFilter1.1、配置示例1.2、参数说明二、CSRF保护过滤器CsrfPreventionFilter2.1、配置示例2.2、参数说明三、防止参数丢失过...
    99+
    2024-04-02
  • JavaScript中常用的数组过滤方法
    在 JavaScript 编程中,经常会遇到需要对数组进行筛选和过滤的情况。本文将介绍几种常用的数组过滤方法,帮助你在处理数组数据时更加灵活高效。 1. 使用filter()方法 filter() 方...
    99+
    2023-10-21
    javascript 前端 开发语言
  • JavaFile类常用方法与文件过滤器详解
    目录File类File类常用的构造方法查看文件的相应信息遍历目录下的文件文件过滤器对子目录进行遍历删除文件及目录File类 File类用于封装一个路径,这个路径可以是从系统盘符开始的...
    99+
    2024-04-02
  • vue中过滤器的用法
    一、过滤器 过滤器是vue中的一个特性,作用是用于对文本进行格式化的作用。 注意:在vue 1.0中有内置的过滤器,在2.0中去掉了内置过滤器,只有自定义过滤器 二、使用位置 过滤器...
    99+
    2024-04-02
  • DRF过滤排序分页异常处理的过程记录
    目录一、过滤二、排序三、分页PageNumberPaginationLimitOffsetPaginationCursorPagination继承APIView使用方法四、异常处理源...
    99+
    2024-04-02
  • ASP.NET MVC授权过滤器用法
    过滤器 过滤器(Filter)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,并不是每个请求都会响应内容,只有那些有特定权限的用户才能响应特定的内容...
    99+
    2024-04-02
  • VUE过滤器的使用方法
    这篇文章主要讲解了“VUE过滤器的使用方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“VUE过滤器的使用方法”吧!1. 定义一个日期格式化函数都9012了...
    99+
    2024-04-02
  • java配置多个过滤器优先级以及几个常用过滤器操作
    目录过滤器配置:常用过滤器之一:常用过滤器之二:敏感词过滤工具类一个项目中不出意外的话会有两个以上的过滤器,但是直接不配置的话他会按照你的过滤器名字排序执行,这样的话可能会导致一些性...
    99+
    2024-04-02
  • Vue中全局常用的过滤方法解读
    目录1.将整数部分逢三一断2.将数据格式化为金额3.展示时,字数超出10个字的后面省略4.格式化日期为YYYY-MM-DD5.格式化日期为YYYY-MM-DD HH:mm:ss总结全...
    99+
    2023-01-28
    Vue全局 Vue过滤方法 Vue全局过滤
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作