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

news/2024/11/16 5:35:54/文章来源:https://www.cnblogs.com/lovefoolself/p/18401391

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,只是用信息标注请求的异常信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/793507.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

等保安全设备配置

这篇文章带你了解等保2.0 二级和三级安全设备配置!本文介绍了不同等级的等保规划设计,包括二级等保(基础版)、三级等保(基础版、增强版、豪华版)。其中,各版本均需配备主机杀毒软件和日志审计系统等,增强版和豪华版还需增加 IPS、Anti-DDoS 等。此外,文章还提到内网安…

触想全新Z系列工控机扩展IIoT应用潜能

8月31日,触想重磅推出全新Z系列高性能、扩展型工控机——TPC05/06/07-WIPC,提供标准版/双卡槽/四卡槽3款机型选择。作为边缘计算、机器视觉、AI智能和工业应用的理想机型,Z系列工控机支持Intel第12/13/14代Core™ i3/i5/i7/i9处理器,最多搭载4个PCIe/PCI的扩展能力,可外接…

K8S怎么删除一个Node节点

驱逐Pod 本次node为172.16.5.103# kubectl drain 172.16.5.103 --force --ignore-daemonsets查看该节点无法调度删除node# kubectl delete node 172.16.5.103

Base2024

Aura 酱的礼物 ssrf data伪协议 格式 data://text/plain,xxx能读取出内容 data://text/plain;base64,xxxxxx,xxxxxx先base64解码 再读取出内容 @隔断 当要求url开头时,使用@来分隔 file=http://baidu.com@127.0.0.1源码 <?php highlight_file(__FILE__); // Aura 酱,欢迎…

短视频程序源码,文件上传漏洞及防御方法

短视频程序源码,文件上传漏洞及防御方法一、文件上传漏洞原理在短视频程序源码的文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。二、文件上传漏洞触发点相…

Windows11安装Jenkins

Windows11安装Jenkins 1. 下载安装JDK11 从2022年 6 月 28 日发布的 Jenkins 2.357 和2022年9 月发布的 LTS 版本开始,Jenkins 需要 Java 11 才能使用,放弃 Java 8,如果用JDK1.8,那么Jenkins版本需要是2.357版本之前。 JDK11下载渠道oracle官网:https://www.oracle.com/ja…

PART1-Oracle关系数据结构-数据字典与动态性能视图

6. 数据字典与动态性能视图 6.1. 数据字典概述 Oracle数据库的一个重要组成部分是其数据字典,这是一个只读的表集合,提供了有关数据库的管理元数据。数据字典包含如下信息:数据库中每个模式对象的定义,包括列的默认值和完整性约束信息 分配给模式对象的空间量以及当前使用的…

最让程序员破防的12句话,你来补充下一句。

1、这个应该很简单吧,要那么久? 2、之前有一个类似的功能,拿过来改一下就好了。 3、产品说这个功能,已经给客户沟通好了,你想办法看怎么实现。 4、这个需求真的是最终版了。 5、要不我们还是使用上一版设计? 6、先做出来看看,不合适再改。 7、我就要这种效果,怎么实现是…

Delphi怎样安装和配置第三方控件并处理找不到文件

一、提示信息:[dcc64 Error] E1026 File not found: ‘***.res’ 二、解决方法: 1、正解:应当去看官方的安装说明文档,比如若你用自动或手动方式安装和部署TMS FlexCel Studio for VCL and FireMonkey *.*.*.*.exe时,你应当仔细阅读官方的安装说明:http://www.tmssoftwar…

五子棋AI:实现逻辑与相关背景探讨(上)

绪论本合集将详细讲述如何实现基于群只能遗传算法的五子棋AI,采用C++作为底层编程语言 本篇将简要讨论实现思路,并在后续的文中逐一展开了解五子棋 五子棋规则五子棋是一种经典的棋类游戏,规则简单却充满策略性。游戏在一个1919的棋盘上进行(也可以使用1313或1515的棋盘)。…

常用delphi IDE环境配置

目录 常用delphi XE IDE环境配置,大家都需要熟练 一、android SDK : 二、环境变量 User System Overrides :覆盖用户操作系统的全局配置参数:System Variables 操作系统层面的全局变量: 其中:重要的,和自己个性化的: 三、自己的类库路径 四、测试工程默认路径 五、…

如果没有热风枪,如何组合热缩管的5种简单方法

转载自:https://mil.sohu.com/a/779354413_120429259当谈到收缩热缩管时,没有什么比热风枪更好的了。但如果你没有,你该怎么办? 请放心,您仍然可以在没有热风枪的情况下使用热缩管。它可以响应多种热源,因此您可以使用许多替代工具。 在本文中,我列出了一些最流行的热收…