在ASP.NET Core 3中,可以使用全局异常处理中间件来捕获应用程序中的所有异常,并提供自定义的错误处理逻辑。下面是一个示例代码,演示了如何在ASP.NET Core 3中实现全局异常处理中间件。
首先,创建一个自定义的异常处理中间件类,命名为CustomExceptionHandlerMiddleware.cs:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Diagnostics;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Net;
public class CustomExceptionHandlerMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
public CustomExceptionHandlerMiddleware(RequestDelegate next, ILogger logger)
{
_next = next;
_logger = logger;
}
public async Task Invoke(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception ex)
{
_logger.LogError(ex, "An unhandled exception occurred.");
var errorResponse = new ErrorResponse
{
StatusCode = (int)HttpStatusCode.InternalServerError,
Message = "An error occurred, please try again later."
};
var result = JsonConvert.SerializeObject(errorResponse);
context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
await context.Response.WriteAsync(result);
}
}
}
public static class CustomExceptionHandlerMiddlewareExtensions
{
public static IApplicationBuilder UseCustomExceptionHandler(this IApplicationBuilder builder)
{
return builder.UseMiddleware();
}
}
public class ErrorResponse
{
public int StatusCode { get; set; }
public string Message { get; set; }
}
然后,在Startup.cs文件的Configure方法中,添加以下代码来使用自定义的异常处理中间件:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Other middleware configurations
app.UseCustomExceptionHandler();
// Other middleware configurations
}
这样,当应用程序中抛出异常时,将会通过自定义的异常处理中间件来处理,并返回自定义的错误响应。
请注意,在示例代码中,我们将异常信息记录到日志中,并返回一个包含错误状态码和错误消息的JSON响应。您可以根据需要进行自定义和调整。