首页 > 其他分享 >记一次.net使用httpclient中代码中使用response.EnsureSuccessStatusCode()引发的误会

记一次.net使用httpclient中代码中使用response.EnsureSuccessStatusCode()引发的误会

时间:2024-09-07 10:14:17浏览次数:4  
标签:返回 代码 接口 EnsureSuccessStatusCode net 异常 response

1.问题背景

有一个拉取第三方数据存储到本地的需求,使用.net开发,使用httpClient发送post请求。第三方接口里面会校验我们发送的json数据,如果我们的数据格式不正确会抛出异常。

2.返回的结果不同?

第一步,我用postman做了测试,对方的接口可以调用,正确和错误都可以返回。
第二步,我使用代码测试,发现发送的json数据格式不正确的时候,返回的response里面没有错误信息,只有Bad RequestException
这让人大大不解

3.思考步骤

1.既然postman测试没有问题,人家的接口就是没有问题的,肯定是使用httpClient出了问题
2.研究哪里出了问题,但是调用的代码是超级简单的,哪边不对呢?

4.问题解决

最后发现postman使用正确json在请求成功的时候,状态200,成功输出了数据
image
在数据格式不正确时,返回如下,也是返回了数据。但是等等!!! 状态码是400!!!
image
然后我看了下,我.net代码里面有这样一句话
response.EnsureSuccessStatusCode()
这行代码是毁灭性的,我们点击查看他的源代码。
image
再看一下他判断的状态的代码
image
这下就清楚了,当对方返回了400状态后(虽然代入了异常信息),因为那一行代码的缘故,response里面不再是对方返回的异常信息,而是我们自己的ex里面的message。EnsureSuccessStatusCode方法抛出了异常。
删除这行代码,问题解决。

5.思考

1.我觉得加入EnsureSuccessStatusCode 并没有问题,但是没有正确理解这行代码,这行代码的意思是检验http状态码,不正确就抛出异常
2.对方的接口是不好的接口。正确的方式应该返回的状态码依然是200,但是信息是错误信息。但是第三方的接口直接就抛出了一个400的异常。
3.这里有一个思考,接口有异常信息是直接{400,message},还是{200.message},就是http请求一直是ok,只是用信息标注请求的异常信息。

标签:返回,代码,接口,EnsureSuccessStatusCode,net,异常,response
From: https://www.cnblogs.com/lovefoolself/p/18401391

相关文章

  • 1、.Net UI框架:Blazor Hybrid - .Net宣传系列文章
    BlazorHybrid是.NET6中引入的一个新特性,它允许开发者使用Blazor技术开发跨平台的桌面和移动应用程序。BlazorHybrid结合了BlazorWebAssembly和BlazorServer的优势,提供了一种在桌面和移动设备上运行Blazor应用的方法。BlazorHybrid的关键特性包括......
  • musl libc 与 glibc 在 .NET 应用程序中的兼容性
    muslLinux和glibc是两种不同的C标准库实现,它们在多个方面存在显著差异。历史和使用情况:glibc是较早且广泛使用的C标准库实现,具有较长的开发历史和广泛的社区支持。它被大多数Linux发行版采用,特别是在桌面和服务器环境中。musl是一个相对较新的实现,旨在提供更小、更快......
  • .NET 压缩/解压文件
    本文为大家介绍下.NET解压/压缩zip文件。虽然解压缩不是啥核心技术,但压缩性能以及进度处理还是需要关注下,针对使用较多的zip开源组件验证,给大家提供技术选型之前在《.NETWebSocket高并发通信阻塞问题-唐宋元明清2188-博客园(cnblogs.com)》讲过,团队遇到Zip文件解压进度频率......
  • What is Convolutional Neural Network(CNN)?
    笔记核心部分摘抄以及自己的理解[附有样例,可以轻松理解]:卷积网络的卷积层中使用了卷积操作,这个操作可以捕捉到图像中的局部特征而不受其位置的影响。在外围边缘补充若干圈0,方便从初始位置以步长为单位可以刚好滑倒末尾位置,通俗地讲就是为了总长能被步长整除。池化层通过减......
  • D20 kubernetes 工作负载资源对象-Deployment
    1、Deployment简介 Deployment是kubernetes中最常用的工作负载资源,具有以下特点和功能-副本管理:确保指定数量的pod副本在集群中运行。如果pod副本数小于期望值,则会自动创建pod;如果pod的副本数多余期望值,则删除多余的pod-滚动更新:采用滚动更新策略,逐步进行新旧版本pod的替换......
  • asp.net中配置文件如何注册引用
    配置文件如何注册引用注册配置文件的形式注册方式//第一种注册方式:注册配置文件builder.Services.Configure<AppSettings>(builder.Configuration.GetSection("AppSettings"));AppSettingsappSettings=builder.Configuration.GetSection(AppSettings.Key).Get<AppSettin......
  • 导入数据至数据集时报错Meta endpoint! Unexpected status code: 502, with response
    我的dify服务器是在内网环境,首先它需要通过代理去调用LLM,但打开代理后调用difyweaviate服务会报错:Metaendpoint!Unexpectedstatuscode:502,withresponsebody:None.所以,需要做的是:既要在调用LLM的时候走代理,又要调用difyweaviate服务的时候不走代理。配置如下:di......
  • JAVA网络编程之InetAddress 和 SocketAddress 的区别
    InetAddress和SocketAddress是Java网络编程中常用的类,用于处理网络连接中的地址信息。1.InetAddressInetAddress用于表示IP地址,既可以是IPV4也可以是IPV6。它可以用来获取主机的IP地址,或根据IP地址查找主机名。InetAddress是抽象类,常用的有两个子类:Inet4Address和I......
  • NetCore MVC Controller和View之间传递数据
    方式一:使用@Model1.在Controller中定义变量:publicclassMyController:Controller{publicstringMyModelVariable{get;set;}publicIActionResultIndex(){MyModelVariable="Hello,World!";returnView(this);}} ......
  • Kubernetes学习指南:保姆级实操手册07——calico安装、metric-server安装
    七、Kubernetes学习指南:保姆级实操手册07——calico安装、metric-server安装一、calicoCalico是一个开源的虚拟化网络方案,支持基础的Pod网络通信和网络策略功能。官方文档:https://projectcalico.docs.tigera.io/getting-started/kubernetes/quickstart1、calico安装###在Master控......