Asp.Net Web API 异常处理经验总结


当前第2页 返回上一页

接下来我们来写一个ExceptionHandler,在整个Web API框架中,ExceptionHandler只能提供一个实例,与ExceptionLogger一样,我们可以继承ExceptionHandler基类来简化异常处理,在ExceptionHandler中也提供了ShouldHandle方法来判断该异常是否应该处理,避免重复处理管道中其他环节重复抛出的异常。我们也同样提供一个例子:


1

2

3

4

5

6

7

8

9

10

11

    public class ErrorHandler : ExceptionHandler

    {        public override async Task HandleAsync(ExceptionHandlerContext context, CancellationToken cancellationToken)

        {            if (context.Exception is DemoException)

            {

                context.Result = new ResponseMessageResult(context.Request.CreateResponse(HttpStatusCode.BadRequest,new {Message=context.Exception.Message}));

            }            else

            {

                context.Result = new ResponseMessageResult(context.Request.CreateResponse(HttpStatusCode.InternalServerError,new {Message = "服务器已被外星人绑架"}));

            }

        }

}

在这个例子中,我们判断了异常的类型,并根据不同的异常返回客户端不同的响应内容和不同的HTTP状态码。

然后在配置中注册这个异常处理模块,在App_Start/WebApiConfig.cs文件中的Register方法中写入


1

config.Services.Replace(typeof(IExceptionHandler),new ErrorHandler());

这样就替换了系统默认的ExceptionHandler,可以使用我们自定义的Handler进行异常的处理了。

在异常记录、处理过程中,我们都碰到相应的异常上下文参数,我们能通过这个参数获取当前请求的上下文,获取请求、响应(小心有时会为空哦)、捕获到该异常的catch块信息等内容,我们可以利用这些信息更好地描述、记录、处理异常。

到这里ExceptionLogger组件和ExceptionHandler组件简单的开发就完成了。在开发的过程中我们可以看到,ExceptionLogger负责了全局的异常记录,在Web API框架管道下出现未处理的异常ExceptionLogger都会进行捕获、记录。而ExceptionHandler和ExceptionFilter功能是有重叠的,那何时使用ExceptionHandler何时使用ExceptionFilter呢?我们可以将两者的区别列出如下的表格:

ExceptionFilter

ExceptionHandler

作用域

Controller、Action

全局

实例个数

无限制

全局唯一

作用条件

Controller实例化成功之后

Web API成功加载之后

  经过上面的表我们可以看出,如果处理颗粒度细致到Controller、Action级别时,ExceptionFilter处理起来会更得心应手,他已经能精确定位到某个Action,然后可以针对当前Action做定制开发。而ExceptionHandler作用域远大于ExceptionFilter,他处理全局更有优势。

  关于Web API异常处理的相关内容我就讲这么一些,如果在文章中有任何不正确的地方或者疑问,欢迎大家为我指出。

以上就是Asp.Net Web API 异常处理经验总结的详细内容!

返回前面的内容

相关阅读 >>

asp.net的简单定义与介绍

asp.net(三)web端展示

关于asp.net如何利用ajaxpro完成前端跟后台交互的实例分析

mvc中获得controller、url及action的asp.net方法详解

asp.net core项目配置教程(6)_实用技巧

asp.net core实例教程之项目结构

防止sql注入的asp.net方法实例解析

asp.net》数据绑定―datalist实践篇的图文代码详解

有关asp.net如何实现多个文件同时下载问题相关解答

asp.net mvc如何正确运用异步编程技术

更多相关阅读请进入《asp.net》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...