栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ASP.NET Core Web API异常处理

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ASP.NET Core Web API异常处理

异常处理中间件

在使用不同的异常处理方法进行了许多实验之后,我最终使用了中间件。对于我的ASP.NET Core Web
API应用程序,它表现得最好。它可以处理应用程序异常以及动作过滤器中的异常,并且我可以完全控制异常处理和HTTP响应。这是我的异常处理中间件:

public class ErrorHandlingMiddleware{    private readonly RequestDelegate next;    public ErrorHandlingMiddleware(RequestDelegate next)    {        this.next = next;    }    public async Task Invoke(HttpContext context )    {        try        { await next(context);        }        catch (Exception ex)        { await HandleExceptionAsync(context, ex);        }    }    private static Task HandleExceptionAsync(HttpContext context, Exception ex)    {        var pre = HttpStatusCode.InternalServerError; // 500 if unexpected        if      (ex is MyNotFoundException)     pre = HttpStatusCode.NotFound;        else if (ex is MyUnauthorizedException) pre = HttpStatusCode.Unauthorized;        else if (ex is MyException)  pre = HttpStatusCode.BadRequest;        var result = JsonConvert.SerializeObject(new { error = ex.Message });        context.Response.ContentType = "application/json";        context.Response.StatusCode = (int)pre;        return context.Response.WriteAsync(result);    }}

在课堂上 在MVC之前 注册

Startup

app.UseMiddleware(typeof(ErrorHandlingMiddleware));app.UseMvc();

您可以添加堆栈跟踪,异常类型名称,错误代码或您想要的任何内容。非常灵活。这是异常响应的示例:

{ "error": "Authentication token is not valid." }

考虑序列化响应对象以利用ASP.NET
MVC的序列化设置在所有端点之间实现更好的序列化一致性时,考虑注入

IOptions<MvcJsonOptions>
Invoke
方法,然后使用该方法
JsonConvert.SerializeObject(errorObj,opts.Value.SerializerSettings)

方法2

UseExceptionHandler
对于简单的方案,还有另一个非显而易见的API 可以正常工作:

app.UseExceptionHandler(a => a.Run(async context =>{    var feature = context.Features.Get<IExceptionHandlerPathFeature>();    var exception = feature.Error;    var result = JsonConvert.SerializeObject(new { error = exception.Message });    context.Response.ContentType = "application/json";    await context.Response.WriteAsync(result);}));

这不是设置异常处理的非常明显但简单的方法。但是,我仍然更喜欢中间件方法,因为我获得了更多控制权并具有注入必要依赖项的能力。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433005.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号