首页
学习
活动
专区
圈层
工具
发布

ASP.NET Web API 2中的错误处理

前几天在webapi项目中遇到一个问题:Controller构造函数中抛出异常时全局过滤器捕获不到,于是网搜一把写下这篇博客作为总结。...---- HttpResponseException 通常在WebAPI的Controller中抛出的未处理异常,会以500的形式返回到客户端。...HttpError public HttpResponseMessage Exception() { //使用Request对象创建返回到客户端的错误信息 Request.CreateErrorResponse...Exception Filters 自定义派生自ExceptionFilterAttribute或IExceptionFilter的异常处理类用于异常的处理。...,过滤器是无法捕获到的: Controller构造函数中抛出的异常 消息处理器中抛出的异常 路由过程中出现的异常 其它过滤器中抛出的异常 序列化返回内容时抛出的异常 解决方案如下

2.5K30

优雅地进行全局异常处理、统一返回值封装、自定义异常错误码——Graceful-Response推荐

简介Graceful Response是一个Spring Boot体系下的优雅响应处理器,提供一站式统一返回值封装、全局异常处理、自定义异常错误码等功能,使用Graceful Response进行web...RuntimeException {}当Service方法抛出NotFoundException异常时,接口将直接返回错误码,不需要手工set。...部分用户反馈,希望在不自定义新异常类的情况下,也能可以按照预期返回错误码和异常信息,因此从2.1版本开始,新增了GracefulResponseException异常类,用户只需要抛出该异常即可。...这样做的目的是将用户的关注点从异常转移到错误码。...这类非自定义的异常,如果需要自定义一个错误码返回,将不得不对每个异常编写Advice逻辑,在Advice中设置错误码和提示信息,这样做非常繁琐。

3.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Django+DRF 实战:从异常捕获到自定义错误信息

    Throttled:请求被限流时会出现这个异常。ValidationError:数据验证失败时触发。通过继承 APIException 类,可以实现自定义(业务)异常。并根据业务需求在视图层返回。...,并在不符合要求时返回自定义错误信息。...例如:在用户注册的时候,对用户名、昵称和密码进行校验,校验失败时返回自定义的错误信息。...定义序列化器定义用户注册序列化器,用户请求参数校验失败时,返回自定义错误信息校验用户名由字母数字组成、最小长度和最大长度校验昵称最小长度和最大长度校对密码最小长度和最大长度定义视图定义用户注册视图,调用序列化器的...关注不迷路~

    19100

    程序员你是如何解决软件系统易排错性的?

    统一技术方案 位置 处理要点 说明 前端 前端实现axios拦截器异常捕获,封装组件实现,展示逻辑&形式 原则:服务端能响应的、能返回错误的,提示语使用后端返回服务端不能响应的、不能返回错误的,提示语使用前端约定...2 在引擎层进行了编码和MSG的规范 PortalException RuntimeException->Exception Web Api异常 Portal 抛出的自定义异常 code msg 异常数据自定义...-》RuntimeException->Exception 校验许可证抛出的异常code msg 异常数据自定义 许可证异常,引擎层的自定义异常 ConstraintViolationException...,应该尝试抛出或者写到日志,否则无法判断异常发生的位置; 不要使用e.printStackTrace(),在分布式系统中,无法确定输出到了什么位置,应该输出到日志中; 提早抛出,晚点捕获;提高效率 自定义异常的时候需要注意两点...,最差要做托底中文信息替换; 前端 *原则:服务端能响应的、能返回错误的,提示语使用后端返回 服务端不能响应的、不能返回错误的,提示语使用前端约定 *1.

    16300

    AspNet.Core之使用CancellationToken来提高应用负载

    本文要说的是利用异步编程中的取消机制缓解数据库的查询瓶颈,开发者只需在MVC/WebAPI查询方法体内关注CancellationToken并适时取消异步任务, 这将大大提高应用的响应能力。...tip 本文取消的请求,指的是耗时长的服务端读取请求(返回数据但不修改数据的查询),取消已修改数据的请求对于用程序可能不是一个好的选择: ① 是否真的要因为用户导航到应用的另一个页面而取消保存?...P1 监测CancellationToken令牌 MVC/WebAPI能收到取消请求的信号。...slow non-cancellable work Thread.Sleep(1000); } return View(items); } P2 处理取消异步操作向上抛出的异常处...Web服务器触发取消信号,一般会向上会抛出OperationCanceledException或TaskCancellationException,所以为了记录这种非常规异常,建议采用独立的ExceptionFilter

    2.8K10

    使用 System.Net.Http.Json 高效处理Json数据

    ,我需要手动处理响应,通常会验证响应状态代码是否为200,检查内容是不是为空,然后再试图从响应内容流反序列化 如果我们使用 Newtonsoft.Json, 代码可能是像下边这样 private static...如果您在过去在项目中使用过 HttpClient 来处理返回的Json数据,那么您可能已经使用了Microsoft.AspNet.WebApi.Client。...User 实体,这很简洁,另外上边有详细的异常处理代码,在各种条件下来抛出异常 跟最上面的代码一样,使用 EnsureSuccessStatusCode 来判断状态码是否成功,如果状态码在 200-299...之外,会抛出异常 并且这个库还会检查是不是有效的媒体类型,比如 application/json, 如果媒体类型错误,将抛出 NotSupportedException,这里的检查比我上边手动处理的代码更加完整...application/+json 也是有效的格式 这种格式是现在经常使用的,另外一个例子,可以发现这个库对于标准和细节的处理,RFC7159 标准 定义一种携带机器可读的HTTP响应中的错误

    2.6K00

    「译」使用 System.Net.Http.Json 高效处理Json

    ,我需要手动处理响应,通常会验证响应状态代码是否为200,检查内容是不是为空,然后再试图从响应内容流反序列化 如果我们使用 Newtonsoft.Json, 代码可能是像下边这样 private static...如果您在过去在项目中使用过 HttpClient 来处理返回的Json数据,那么您可能已经使用了Microsoft.AspNet.WebApi.Client。...User 实体,这很简洁,另外上边有详细的异常处理代码,在各种条件下来抛出异常 跟最上面的代码一样,使用 EnsureSuccessStatusCode 来判断状态码是否成功,如果状态码在 200-299...之外,会抛出异常 并且这个库还会检查是不是有效的媒体类型,比如 application/json, 如果媒体类型错误,将抛出 NotSupportedException,这里的检查比我上边手动处理的代码更加完整...这种格式是现在经常使用的,另外一个例子,可以发现这个库对于标准和细节的处理,RFC7159 标准 定义一种携带机器可读的HTTP响应中的错误,比如 application/problem+json, 我手写的代码没有处理和匹配这些

    1.6K20

    如何创建一个自定义的`ErrorHandlerMiddleware`方法

    在本文中,我将讲解如何通过自定义ExceptionHandlerMiddleware,以便在中间件管道中发生错误时创建自定义响应,而不是提供一个“重新执行”管道的路径。...这没有听起来那么糟糕:即使没有异常处理中间件,ASP.NET Core也会在其底层架构中捕获该异常,将其记录下来,并向客户端返回一个空白的500响应: ?...由于被第二次抛出异常,我多次被失败的错误响应所困扰!因此,我喜欢采取稍微不同的方法。...ProblemDetails是返回HTTP响应中错误的机器可读详细信息的行业标准方法。...这是从ASP.NET Core 3.x(在某种程度上在2.2版中)的Web API返回错误消息的普遍支持的方法。 我们将从在静态帮助器类中定义UseCustomErrors函数开始。

    3K10

    springboot全局异常处理解析

    ,返回结构化的错误响应。...,处理逻辑时从异常子类追溯到Exception以及Throwable,也就是说粒度越细,返回响应越具备语义性,对于非业务异常、以及基础服务、基础组件异常,通常需要用Exception或Throwable...大致调用链路如下: 四、ResponseEntityExceptionHandler方式 ResponseEntityExceptionHandler是Spring框架中用于处理控制器方法中抛出的异常并返回适当响应的类...从源码可以看到ResponseEntityExceptionHandler本质上也是使用@ExceptionHandler方式捕获和处理异常的,如果上述列出的异常,则可以实现该类做自定义封装响应,但是如果是上述没有枚举的异常类型...也是一种比较好用的异常处理方式,其他方式从理解成本、便捷性角度来看,不推荐使用。

    23910

    异常问题-异常处理

    在统一异常处理类中去捕获异常,无需controller捕获异常,向用户返回统一规范的响应信息。...自定义错误代码及错误信息。 对于可预知的异常由程序员在代码中主动抛出,由SpringMVC统一捕获。...可预知的异常及不可预知的运行时异常最终会采用统一的信息格式(错误代码+错误信息)来表示,最终也会随 请求响应给客户端。 异常抛出及处理流程: ?...在controller、service、dao中程序员抛出自定义异常;springMVC框架抛出框架异常类型 统一由异常捕获类捕获异常,并进行处理 捕获到自定义异常则直接取出错误代码及错误信息,响应给用户...捕获到非自定义异常类型首先从Map中找该异常类型是否对应具体的错误代码,如果有则取出错误代码和错误 信息并响应给用户,如果从Map中找不到异常类型所对应的错误代码则统一为99999错误代码并响应给用户。

    3K20

    Django+DRF 实战:自定义异常处理流程

    该函数对DRF异常(即继承了APIException 类)和Django内置的Http404、PermissionDenied异常,提取错误信息并返回响应其它异常不处理,返回None(抛出到外层)。...DRF 自定义异常处理流程示例:定义custom_exception_handler函数,作为DRF的全局异常处理器该函数记录详细的错误日志,包括用户、IP、请求路径、方法、视图及异常信息。...然后,统一返回错误响应格式若异常未被 DRF 捕获,返回 500 错误或特定 ProtectedError 提示若为 DRF 的 ValidationError 或 Django 的验证错误,调用对应处理函数提取错误信息其他异常则根据状态码返回预定义的友好提示应用自定义异常处理流程在......}点击查看完成代码您正在阅读的是《Django从入门到实战》专栏!...关注不迷路~

    23500

    深入剖析Spring Cloud Feign中的DecodeException:Type definition error

    如果响应体的格式与预期的类型不匹配,或者解码器无法正确处理响应体,就可能抛出DecodeException异常。...响应体格式错误:服务端返回的JSON或XML格式可能存在问题,如缺少必要的字段、格式错误等。自定义解码器问题:如果使用了自定义的解码器,可能存在逻辑错误或者对响应体的处理不当。...验证响应体格式检查服务端返回的响应体,确保其格式正确。可以使用在线JSON验证工具或XML验证工具来检查。3. 自定义解码器调试如果使用了自定义解码器,需要确保解码器能够正确处理各种可能的响应体。...JSON不匹配,就可能抛出DecodeException。...错误处理策略异常捕获:在Feign客户端的方法中捕获DecodeException异常,并根据业务需求进行适当的处理。例如,可以返回默认值或者抛出自定义的异常。

    3.2K10

    Java面试集锦(一)之Java异常

    throws:当我们在方法中抛出任何已检查的异常而不处理它时,我们需要在方法签名中使用throws关键字让调用者程序知道该方法可能抛出的异常。...未经检查的异常主要是由编程不良引起的,例如在对象引用上调用方法时的NullPointerException,而不确保它不为null。例如,我可以编写一个方法来从字符串中删除所有元音。...自定义异常类可以拥有自己的变量和方法,我们可以使用它们将错误代码或其他与异常相关的信息传递给异常处理程序。 自定义异常的一个简单示例如下所示。...始终记录异常消息以进行调试。 使用multi-catch块清洁关闭。 使用自定义异常从应用程序API中抛出单一类型的异常。 遵循命名约定,始终以Exception结束。...记录在javadoc中使用@throws的方法抛出的异常。 异常是昂贵的,所以只有在有意义的时候抛出它。否则,您可以捕获它们并提供空或空响应。

    1.6K40

    【Laravel系列7.2】错误与异常处理

    渲染异常 产生了异常之后,我们肯定要有一个显示异常的响应返回回来。对于 Laravel 来说,默认情况下根据不同的 APP_DEBUG 的配置,就可以得到上面两个截图中的不同的响应返回页面。...这是默认情况下框架为我们提供的页面,那么我们能不能自定义异常的返回页面或者返回信息呢?当然没有问题。...比如说在这里我通过判断请求是否是 ajax 请求来返回不同的响应的内容,如果是 ajax 请求,那么就返回 json 格式的错误信息。如果不是的话,就返回一个我自己定义的错误页面。...abort(404, '没有找到页面哦'); 在测试的时候我们要把上面在 register() 中写的 renderable() 给注释掉,因为我们捕获了全局的 Exception 并进行响应返回,如果不注释掉就会以我们自定义的...通过这个实例及其父类的 report() 方法报告异常,记录日志,然后通过 render() 方法返回输出错误结果到响应流中,一套异常处理过程就这样走完了。 简单不?惊喜不?

    4.5K20

    【Java】已解决:ResponseEntityException的Spring MVC异常响应实体异常

    已解决:ResponseEntityException的Spring MVC异常响应实体异常 一、分析问题背景 在Spring MVC开发过程中,ResponseEntity通常用于返回HTTP响应实体...二、可能出错的原因 导致ResponseEntityException报错的原因主要有以下几点: 异常处理不当:未正确处理自定义异常,导致返回的响应实体不符合预期。...数据类型不匹配:返回的ResponseEntity类型与预期类型不匹配。 不正确的异常捕获:没有正确捕获并处理异常,导致未返回合适的HTTP状态码和错误信息。...: 未使用ResponseEntity处理异常:直接抛出RuntimeException,未捕获并使用ResponseEntity返回合适的HTTP响应。...五、注意事项 在编写和使用Spring MVC的ResponseEntity时,需要注意以下几点: 正确处理异常:使用@ExceptionHandler注解处理控制器中的异常,确保返回的HTTP响应符合预期

    89710

    【愚公系列】2023年10月 .NET CORE工具案例-HTTP请求之WebApiClientCore

    三个地方,但是必须使用正确的构造器,否则运行时会抛出异常。...HttpApiException和ApiResultException等,这些异常类型通常以响应错误代码和响应正文的形式抛出。...如果指定了Accept内容,则会从响应头中获取Content-Type,并与Accept内容进行匹配。如果匹配成功,则直接返回,否则抛出异常。...该方法的目的是为了防止服务端返回的响应格式与客户端期望的格式不匹配,从而导致数据无法解析或解析错误的情况发生。...OnRequestAsync方法签名允许开发人员在请求执行前、后或请求发生异常时执行自定义代码。该方法返回值为一个Task对象,可以在该方法中进行异步操作。

    2.6K11

    快速入门系列--WebAPI--04在老版本MVC4下的调整

    相关的特性包括:ModelBindingAttribute,默认绑定逻辑;FormUriAttribute,只从Uri获取值;FromBodyAtrribute,使用MediaTypeFormatter...Tip:模型绑定常见问题,WebAPI的格式化器Formatter需要提供相应的contentType才会起作用,返回值通过dataType设置(默认为XML),一定不能忘记内容协商,需要注意内容协商,...这儿强烈提醒的是dataType表示返回值类型,contentType为请求体的类型,熊二你个二货,内容协商是必须的,不然别人哪知道怎么做!...如果说自定义绑定器或格式化器是用于扩展正常状态下解析数据的话,那么过滤器可以用在一些特殊情况下 IExceptionFilter ExceptionFilterAttribute 当调用操作抛出异常时,...就会调用异常过滤器,可以检查异常,并采取一些操作,例如记录日志、提供新的响应对象来处理异常等 Tip: 在MVC4中,推荐使用同步基类,在以后的版本中推荐使用异步接口对应用程序进行扩展。

    1.5K60

    在C#中使用 CancellationToken 处理异步任务

    Unregister(); 在 HttpClient 中使用 同样,你可以在 HttpClient 中使用传入 CancellationToken (或者使用HttpClient的Timeout属性),超时后,它会抛出一个...new HttpClient().GetAsync("https://www.youtube.com/",cts.Token); Console.ReadKey(); 在 WebAPI中使用 我创建了一个...WebAPI 项目,其中的控制器代码如下,等待了5s,然后进行输出信息。...Task.Delay(5000); Console.WriteLine("Executed"); return Ok(); } 启动项目后,我们在浏览器页面上访问接口,在第一次访问接口等待响应时...只有一次输出,第一次请求抛出了一次 TaskCanceledException 异常,没有继续执行后边的逻辑,当然你可以捕获这个异常,返回更友好的提示!

    2.4K10
    领券