首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Asp.Net Web API 2第七课——Web API异常处理

Web API中错误和异常的处理,包括以下几点:   1.HttpResponseException——HTTP响应异常   2.Exception Filters——异常过滤器   3.Registering...Exception Filters——注册异常过滤器   4.HttpError——HTTP错误 HttpResponseException——HTTP响应异常    如果一个Web API 控制器抛出一个未捕获的异常...这种异常会返回你在异常构造器中指定的任何HTTP状态码。例如,在以下方法中,如果这个id参数无效,那么会返回“404——未找到”。...特别强调一下,Asp.Net MVC中使用的HandleErrorAttribute类不会处理Web API控制器中抛出的异常。...以下示例演示了如何用HttpError在响应体中返回HTTP状态码“404 — 未找到”: public HttpResponseMessage GetProduct(int id) { Product

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

    Asp.Net Web API(二)

    创建一个Web API项目 第一步,创建以下项目 ? 当然,你也可以创建一个Web API项目,利用 Web API模板,Web API模板使用 ASP.Net MVC提供API的帮助页。...这个参数被映射到URI路径中的id字段。这个Asp.Net Web API框架自动把id参数转换为正确的int数据类型,如果id无效,就会抛出一个HttpResponseException异常。...在Web API中复杂类型的参数是从请求消息体中反序列化得到的,因此,我们期待客户端发送XML或JSON格式的一个产品对象的序列号表现形式       此实现会工作,但它还很不完整。...理想情况下,我们希望的HTTP响应。包含以下内容:        响应代码:在默认情况下,这个Web API框架设置响应状态码为200(OK)。...这个方法有两个参数,一个是产品id和更新的产品,id参数是从URI中获得的,product参数是从请求正文反序列化得来的。

    1.9K10

    asp.net web api 异常捕获

    HttpResponseException包含两个重载的构造函数,其中一个是构造函数参数类型为HttpResponseMessage,通过其设置状态码,错误消息短语以及消息体内容来向客户端抛出比较详细的错误信息...异常过滤器不会捕获类型为HttpResponseException的异常,下面的异常也无法被异常过滤器捕获: 1)controller构造器抛出的异常 2)消息处理器抛出的异常 3)路由过程中抛出的异常...4)响应内容序列化与反序列化过程中抛出的异常 代码示例: public class CustomExceptionFilterAttribute : ExceptionFilterAttribute...若ServiceAssembliesResolver在实例化的时候不抛出异常,而是当调用GetAssemblies时抛出异常(例如服务插件存储文件夹被删除),此时无法记录异常。...那么问题就在于GetAssemblies方法何时被调用,通过跟踪代码发现Register中的所有代码都执行完成才会加载服务。

    1.7K120

    Asp.Net Web API 2第十四课——Content Negotiation(内容协商)

    在HTTP中内容协商的主要机制是以下请求报头: Accept:响应可接收的媒体类型,如“application/json”、“application/xml”,或者自定义媒体类型,如“application...Serialization——序列化 如果Web API控制器返回一个CLR类型的响应,(请求处理)管线会对返回值进行序列化,并将其写入HTTP响应体。...服务器以一个Product对象的JSON表示作出了响应。注意,响应中的Content-Type报头已被设置成“application/json”。...为了指定响应体的CLR对象,要调用CreateResponse扩展方法: public HttpResponseMessage GetProduct(int id) { var item = _...以下代码展示了控制器如何才能够直接调用内容协商: public HttpResponseMessage GetProduct(int id) { var product = new Product

    82210

    ASP.NET Web API编程——控制器

    2控制器操作返回值 类型 说明 void 操作返回值为void时,Web API返回空HTTP响应,其状态码为204(无内容) HttpResponseMessage Web api会将此返回值直接转换为...第一种调用HttpResponseMessage的构造函数,实例化一个HttpResponseMessage,并返回。Web API会将其直接转换为HTTP消息。...Web API会调用序列化器将其序列化后写入HTTP响应。...当控制器操作返回此类型时,Web API会调用ExecuteAsync方法创建类型为HttpResponseMessage的实例,然后将这个实例转换为HTTP消息。...2.3返回值为内置类型或自定义类型 返回值为内置类型或自定义类型时,Web API使用格式化器序列化返回值,并将其写入HTTP消息中,响应的状态码为200。

    2.3K50

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

    最后,我们从响应中获取更新后的Person实体类。 这就是一个使用WebApiClientCore中JsonPatchDocument的完整客户端请求和服务端响应流程案例。...注意,在服务端控制器中,我们使用FromBody属性将更新文档从请求体中获取,并使用JsonPatchDocument.ApplyTo方法将更新应用到Person实体类中。...6.5 响应内容缓存 ☀️6.5.1 声明缓存 1、基本使用 在使用WebApiClientCore进行Web API访问时,可通过以下方式声明缓存,在接口上使用CacheAttribute指定缓存策略...HttpApiException和ApiResultException等,这些异常类型通常以响应错误代码和响应正文的形式抛出。...如果指定了Accept内容,则会从响应头中获取Content-Type,并与Accept内容进行匹配。如果匹配成功,则直接返回,否则抛出异常。

    1.7K11

    跨域资源共享(CORS)在ASP.NET Web API中是如何实现的?

    只有在请求通过授权检查的情况下,由CorsResult得到的CORS响应报头才会被添加到此HttpResponseMessage的报头集合中。...我们接下来从表示当前请求的HttpRequestMessge对象中直接获取当前HttpConfiguration对象,并调用扩展方法GetCorsPolicyProviderFactory得到注册在它上面的...CorsResult得到的CORS响应报头添加到此HttpResponseMessage的报头集合中。...对于非预检请求来说,只有在它通过了资源授权检验的情况下,我们才会调用扩展方法AddCorsHeaders将从CorsResult得到的CORS报头添加响应的报头集合中。...创建CorsRequestContext对象,而AddCorsHeaders方法则将从CorsResult中获取的CORS响应报头添加到指定的HttpResponseMessage中。

    2.5K110

    .Net Core HttpClient处理响应压缩「建议收藏」

    前言 在上篇文章[ASP.NET Core中的响应压缩]中我们谈到了在ASP.NET Core服务端处理关于响应压缩的请求,服务端的主要工作就是根据Content-Encoding头信息判断采用哪种方式压缩并返回...比如浏览器,这是我们最常用的Http客户端,许多浏览器都是默认在我们发出请求的时候(比如我们浏览网页的时候)在Request Head中添加Content-Encoding,然后根据响应信息处理相关解压...All = -1, // 不使用解压 None = 0x0, // 使用gzip解压算法 GZip = 0x1, // 使用deflate解压算法 Deflate...= 0x2, // 使用Brotli解压算法 Brotli = 0x4 } 该枚举默认都是针对常用输出解压算法,接下来我们看一下在HttpClientFactory中如何处理响应压缩。...总结 通过本次探讨HttpClient关于响应压缩的处理我们可以了解到,HttpClient无论从设计上还是实现方式上都有非常高的灵活性和扩展性,这也是为什么到了.Net Core上官方只推荐使用HttpClient

    71720

    异步任务实战之远程拉取和风天气API 发布于

    提高响应速度:在这个过程中,考虑到需要同时处理多个用户的请求,使用异步编程,可以并发处理多个请求,提高整体系统的响应性。 异常问题处理:在异步编程中,我们可以更好地处理异常问题。...,同样的它也负责了一个I/O操作,并在失败时抛出了一个CompletionException异常,在成功时返回了解压文件所在的位置。...构建完成的异步任务 现在我们已经构建好了downloadFile远程下载任务和unzipFile解压文件任务,并且也处理好了在发生错误时抛出一个CompletionException类型的异常。...* Gson处理异步过来的HttpResponse * @param responseBody 经过GZIP解压缩的JSON格式的HttpResponse字符串 * @return 返回一个从HttpResponse...文档中着重描述了“返回数据是JSON格式并进行了Gzip压缩,数据类型均为字符串”,所以我们需要通过GzipResponse类来实现解压缩,并将解压缩后的字符串通过Gson工具与WeatherResponse

    26230

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

    前几天在webapi项目中遇到一个问题:Controller构造函数中抛出异常时全局过滤器捕获不到,于是网搜一把写下这篇博客作为总结。...---- HttpResponseException 通常在WebAPI的Controller中抛出的未处理异常,会以500的形式返回到客户端。...() } CreateErrorResponse方法是HttpResponseMessage类型的可扩展方法,该方法最终会调用扩展方法CreateResponse返回一个HttpResponseMessage...过滤器可分为三个级别: Action Controller Global 注意:ASP.NET MVC和ASP.NET WebAPI的异常过滤器不可混用 ExceptionHandler 以下情形中的异常...,过滤器是无法捕获到的: Controller构造函数中抛出的异常 消息处理器中抛出的异常 路由过程中出现的异常 其它过滤器中抛出的异常 序列化返回内容时抛出的异常 解决方案如下

    1.8K30

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

    在此之前我们是如何处理 JSON是一种普遍和流行的串行化格式数据来发送现代web api,我经常在我的项目中使用HttpClient 调用外部资源, 当 content type 是 “application.../json”, 我拿到Json的响应内容后,我需要手动处理响应,通常会验证响应状态代码是否为200,检查内容是不是为空,然后再试图从响应内容流反序列化 如果我们使用 Newtonsoft.Json, 代码可能是像下边这样...我在过去使用过它,因为它提供了有用的扩展方法来支持从HttpResponseMessage上的内容流进行高效的JSON反序列化,这个库依赖于Newtonsoft.Json文件并使用其基于流的API来支持数据的高效反序列化...另外上边有详细的异常处理代码,在各种条件下来抛出异常 跟最上面的代码一样,使用 EnsureSuccessStatusCode 来判断状态码是否成功,如果状态码在 200-299 之外,会抛出异常 并且这个库还会检查是不是有效的媒体类型...总结 在这篇文章中,我们回顾了一些传统的方法,可以用来从HttpResponseMessage 来反序列化对象,我们看到,当手动调用api来解析JSON, 我们首先需要考虑比如响应状态是成功的, 并且是我们需要的媒体类型

    2.2K00

    ASP.NET Core 6框架揭秘实例演示:利用IHttpClientFactory工厂来创建HttpClient

    API HttpClient类型实现了IDisposable接口,如果采用在每次调用时创建新的对象,那么按照我们理解的编程规范,调用结束之后就应该主动调用Dispose方法及时地将其释放。...当调用次数累积到一定规模之后,程序会大量地抛出HttpRequestExcetion异常,并提示“Only one usage of each socket address (protocol/network...如果将演示程序改写成如下的形式使用单例的HttpClient对象就不会抛出上面这个异常,但是这又会带来一些额外的问题。...在接下来演示的实例中,我们将设置两个HttpClient来调用指向“www.foo.com”和“www.bar.com”这两个域名的API。...静态方法创建一个用来处理偶发错误(比如HttpRequestException异常和5XX/408响应)的PolicyBuilderHttpResponseMessage>对象。

    84620

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

    在此之前我们是如何处理 JSON是一种普遍和流行的串行化格式数据来发送现代web api,我经常在我的项目中使用HttpClient 调用外部资源, 当 content type 是 “application.../json”, 我拿到Json的响应内容后,我需要手动处理响应,通常会验证响应状态代码是否为200,检查内容是不是为空,然后再试图从响应内容流反序列化 如果我们使用 Newtonsoft.Json, 代码可能是像下边这样...我在过去使用过它,因为它提供了有用的扩展方法来支持从HttpResponseMessage上的内容流进行高效的JSON反序列化,这个库依赖于Newtonsoft.Json文件并使用其基于流的API来支持数据的高效反序列化...另外上边有详细的异常处理代码,在各种条件下来抛出异常 跟最上面的代码一样,使用 EnsureSuccessStatusCode 来判断状态码是否成功,如果状态码在 200-299 之外,会抛出异常 并且这个库还会检查是不是有效的媒体类型...总结 在这篇文章中,我们回顾了一些传统的方法,可以用来从HttpResponseMessage 来反序列化对象,我们看到,当手动调用api来解析JSON, 我们首先需要考虑比如响应状态是成功的, 并且是我们需要的媒体类型

    1.2K20

    asp.net web api 向客户端返回错误信息

    1使用Http状态码 ASP.NET Web Api框架提供了Http状态码的值,如下图所示。 虽然有这些预定义的状态码,但在实际项目中使用自定状态码结合预定义状态码更有优势。...通过在适当的位置抛出异常   throw new HttpResponseException 通过构造函数设置响应或Http状态,来实现向客户端返回相应的执行状态。...相应地HttpResponseMessage如下图所示: 可通过构造函数设置状态,通过HttpResponseMessage.ReasonPhrase设置原因短语,但只支持英文字符,中文或其他语言文字显示乱码...2 返回响应中包含错误码和消息短语 使用Web api一般返回序列化后的字符串,将错误码与消息短语也包括在序列化字符串内。但对于使用Odata协议来说,无法这样实现。

    2.9K100

    集高性能高可扩展性于一体的声明式http客户端库-WebApiClientCore

    例如[Header]特性,可以声明在Interface、Method和Parameter三个地方,但是必须使用正确的构造器,否则运行时会抛出异常。有了语法分析功能,在声明接口时就不会使用不当的语法。...返回类型 说明 Task 不关注响应消息 TaskHttpResponseMessage> 原始响应消息类型 Task 原始响应流 Task 原始响应二进制数据 Task...请求一个接口,不管出现何种异常,最终都抛出HttpRequestException,HttpRequestException的内部异常为实际具体异常,之所以设计为内部异常,是为了完好的保存内部异常的堆栈信息...WebApiClient内部的很多异常都基于ApiException这个抽象异常,也就是很多情况下,抛出的异常都是内为某个ApiException的HttpRequestException。...配置CacheAttribute特性的Method会将本次的响应内容缓存起来,下一次如果符合预期条件的话,就不会再请求到远程服务器,而是从IResponseCacheProvider获取缓存内容,开发者可以自己实现

    68240

    API网关Ocelot 使用Polly 处理部分失败问题

    在实现API Gateway过程中,另外一个需要考虑的问题就是部分失败。这个问题发生在分布式系统中当一个服务调用另外一个服务超时或者不可用的情况。...API Gateway不应该被阻断并处于无限期等待下游服务的状态。但是,如何处理这种失败依赖于特定的场景和具体服务。如果是产品信息服务无响应,那么API Gateway就应该给客户端返回一个错误。...它实现了 circuit break模 式,使得可以将客户端从无响应服务的无尽等待中停止。...如果一个服务的错误率超过预设值,Polly 将中断服务,并且在一段时间内所有请求立刻失效,Polly 可以为请求失败定义一个fallback操作,例如读取缓存或者返回默认值,有时候我们需要调用其他API...从给项目Ocelot 点赞和fork代码开始,一起来建设,春节我已经给项目贡献了2个特性的代码,服务发现和本文所讲的熔断器。

    1.3K50

    Asp.Net Web API 2第四课——HttpClient消息处理器

    Web API第二课:CRUD操作http://www.cnblogs.com/aehyok/p/3434578.html       Asp.Net Web API第三课:.NET客户端调用Wep...默认的处理器是HTTPClientHandler,它通过网络发送请求,并从服务器上获得响应。你可以把自定义消息处理器插入到客户端管道中。...2.调用base.SendAsync将请求发送给内部处理器。   3.内部处理器返回一条响应消息。(这一步是异步的)   4.处理响应,并把他返回给调用者。...如果处理器在调用之后还要做一些工作,需使用await关键字,以便在方法完成之后继续执行。 以下示例展示了一个对错误码进行日志的处理器。...HttpClientFactory.Create方法: HttpClient client = HttpClientFactory.Create(new MessageHandler()); 消息处理器是按照它们传递给Create方法中的顺序来调用的

    59930

    精:在 .NET 8中使用 Polly 处理瞬态故障

    创建响应服务(Response Service) 首先创建一个新的 .NET Web API 应用程序,命名为 Response Service。...创建 RequestController.cs 文件,用于通过 HttpClient 调用 API,代码如下: namespace RequestService.Controllers { [ApiController...此时我们会从响应服务中得到失败消息,因为还未实现重试机制。...使用 Polly 实现重试机制 使用 dotnet cli 运行以下命令将 Polly 包添加到请求服务中: dotnet add package Microsoft.Extensions.Http.Polly...从响应服务的调试信息中可以看到,在获得成功响应之前经历了四次失败。 在本文中,我们使用 Polly 实现了重试策略。除此之外,Polly 还提供其他模式,比如断路器模式。

    16810
    领券