异常过滤器—MVC中异常过滤器使用
一、什么是异常过滤器?
异常过滤器(Exception Filters)是 ASP.NET Core 中用于处理全局异常的机制。它们允许你在发生异常时捕获、处理和记录异常,并提供自定义的异常处理逻辑。异常过滤器在整个应用程序范围内生效,可以用于处理各种异常情况。用于实现常见的错误处理策略,没有之前和之后事件,处理 Razor 页面或控制器创建、模型绑定、操作过滤器或操作方法中发生的未经处理的异常。但无法捕获资源过滤器、结果过滤器或 MVC 结果执行中发生的异常 。
二、异常过滤器实现
异常过滤器定义:
异常过滤器的定义,需要实现接口IExceptionFilter 或者IAsyncExceptionFilter,该接口包含一个 OnException 方法或者OnExceptionAsync方,用于处理发生的异常,继承后重写此方法。
#region << 版 本 注 释 >>
/*----------------------------------------------------------------
* 创建者:码农阿亮
* 创建时间:2023/8/15 14:02:01
* 版本:V1.0.0
* 描述:
*
* ----------------------------------------------------------------
* 修改人:
* 时间:
* 修改说明:
*
* 版本:V1.0.1
*----------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
namespace MyWebApp.Filter
{
/// <summary>
/// 异常过滤器
/// </summary>
public class ExceptionFilter : Attribute, IExceptionFilter
{
/// <summary>
/// 没有之前和之后事件,当程序发生没有捕获的异常时候执行
/// </summary>
/// <param name="context"></param>
public void OnException(ExceptionContext context)
{
//异常信息
var ex = context.Exception;
//这里可以写入异常日志到数据库、文件或者控制台
Console.WriteLine("错误信息:"+ex.Message);
/*
* 方便测试,此处将错误日志信息返回
*/
context.Result = new ContentResult()
{
Content = ex.Message,
ContentType = "text/html"
};
}
}
}
添加到全局过滤器:
services.AddMvc(options =>
{
//异常过滤器
options.Filters.Add<ExceptionFilter>();
});
添加测试Action:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
namespace MyWebApp.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ExceptionFilterController : ControllerBase
{
/// <summary>
/// 测试:手动抛出一个未捕获异常
/// </summary>
/// <returns></returns>
[HttpGet]
public ActionResult Test()
{
throw new Exception("Oh,My God,A Exception Occurred......");
}
}
}
三、验证:
接口Action访问调用:
访问地址:
https://localhost:5001/ExceptionFilter/Test
控制台输出异常信息:
调用接口时异常过滤器返回异常:
本文来自博客园,作者:码农阿亮,转载请注明原文链接:https://www.cnblogs.com/wml-it/p/17631744.html
技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!
开源库地址,欢迎点亮:
GitHub:https://github.com/ITMingliang
Gitee: https://gitee.com/mingliang_it
GitLab: https://gitlab.com/ITMingliang
建群声明: 本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群】。