雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

.NET Core MVC全局捕获和处理异常

2024-07-18 57

在 ASP.NET Core MVC 中,全局捕获和处理异常有两种主要方法:

1. 使用异常过滤器

异常过滤器是一种 ASP.NET Core MVC 提供的机制,用于在应用程序中的任何位置捕获和处理异常。您可以创建自定义异常过滤器来处理特定类型的异常,或者使用 ASP.NET Core MVC 提供的默认异常过滤器。

以下是如何使用异常过滤器全局捕获和处理异常的步骤:

创建一个自定义异常过滤器类,并继承自 IExceptionFilter 接口。

在异常过滤器类的 OnException 方法中,实现您要对捕获到的异常进行的处理逻辑。

将您的自定义异常过滤器注册到 ASP.NET Core MVC 应用程序的管道中。

以下是一个示例代码:

public class GlobalExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext context)
    {
        if (context.Exception is MyCustomException)
        {
            // 处理 MyCustomException 异常
            context.Handled = true;
            context.Result = new ContentResult()
            {
                Content = "发生 MyCustomException 异常!"
            };
        }
        else
        {
            // 处理其他类型的异常
            context.Handled = false;
        }
    }
}

要将自定义异常过滤器注册到 ASP.NET Core MVC 应用程序的管道中,请在 Startup.ConfigureServices 方法中调用 services.AddControllers().AddFilters() 方法,并向方法传递您的自定义异常过滤器类:

public void ConfigureServices(IServiceCollection services)
{
    // ...

    services.AddControllers().AddFilters(new GlobalExceptionFilter());
}

2. 使用中间件

中间件是一种 ASP.NET Core 提供的机制,用于在 ASP.NET Core 应用程序的管道中拦截和处理请求。您可以创建自定义中间件来捕获和处理异常。

以下是如何使用中间件全局捕获和处理异常的步骤:

创建一个自定义中间件类,并实现 IMiddleware 接口。

在自定义中间件类的 Invoke 方法中,实现您要对请求过程中捕获到的异常进行的处理逻辑。

将您的自定义中间件注册到 ASP.NET Core MVC 应用程序的管道中。

以下是一个示例代码:

public class GlobalExceptionHandlerMiddleware : IMiddleware
{
    public async Task Invoke(HttpContext context, RequestDelegate next)
    {
        try
        {
            await next(context);
        }
        catch (Exception ex)
        {
            if (ex is MyCustomException)
            {
                // 处理 MyCustomException 异常
                context.Response.StatusCode = 500;
                await context.Response.WriteAsync("发生 MyCustomException 异常!");
            }
            else
            {
                // 处理其他类型的异常
                await next(context);
            }
        }
    }
}

要将自定义中间件注册到 ASP.NET Core MVC 应用程序的管道中,请在 Startup.Configure 方法中调用 app.UseMiddleware() 方法,并向方法传递您的自定义中间件类:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ...

    app.UseMiddleware<GlobalExceptionHandlerMiddleware>();

    // ...
}

建议:

建议同时使用异常过滤器和中间件来全局捕获和处理异常。异常过滤器可以用于处理特定类型的异常,而中间件可以用于处理其他类型的异常。

在处理异常时,建议记录异常信息,以便进行后续分析。

在向用户显示错误信息时,建议提供友好的错误信息,并建议用户如何解决问题。

更新于:4个月前
赞一波!

文章评论

评论问答