ASP.NET Core Web API通过中间件或UseExceptionHandler异常处理方法
2024-09-08 12:43:19
UseExceptionHandler
app.UseExceptionHandler(configure =>
{
configure.Run(async context =>
{
var exHeader = context.Features.Get<IExceptionHandlerPathFeature>();
var ex = exHeader.Error;
if (ex != default)
{
await context.Response.WriteAsJsonAsync(new { code = 500, errPath = exHeader.Path, msg = $"服务器内部错误->{ex.Message}" });
} });
});
自定义中间件
app.UseMiddleware<ErrorHandlingMiddleware>();
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Net; namespace TouristRouteWebApplaction.Middleware
{
public class ErrorHandlingMiddleware
{
private readonly RequestDelegate next;
public ErrorHandlingMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext context /* other dependencies */)
{
try
{
await next(context);
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex);
}
}
private static Task HandleExceptionAsync(HttpContext context, Exception ex)
{
var code = HttpStatusCode.InternalServerError; // 500 if unexpected
if (ex is KeyNotFoundException) code = HttpStatusCode.NotFound;
//else if (ex is MyUnauthorizedException) code = HttpStatusCode.Unauthorized;
//else if (ex is MyException) code = HttpStatusCode.BadRequest;
var result = JsonConvert.SerializeObject(new { error = ex.Message });//JsonConvert.SerializeObject(errorObj, opts.Value.SerializerSettings)
context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)code;
return context.Response.WriteAsync(result);
}
}
}
最新文章
- PhotoShop简介
- xml配置文件
- 【mysql5.6】SQL基础
- VB.NET开发中遇到的一个小问题
- JAVA--线程wait()、lnotify()和notifyAll()方法
- Spring.Net控制翻转、依赖注入、面向切面编程
- JavaWEB开发国际化
- webStorm支持.wxml文件高亮显示
- tensorflow的简单操作
- js学习2
- iOS一些高效代码
- go test 测试用例那些事
- python爬虫高级功能
- Linux下TFTP服务的安装、配置和操作
- 转:深入理解css中position属性及z-index属性
- CSS文字过多显示省略号
- Linux FastDFS 分布式文件系统安装
- 安装vue后报错 bash: vue: command not found
- PyQt4工具栏
- Mysql命令行查看数据库大小(数据库版本为5.7以上)