给定一个 HttpResponseMessage,如何读取请求的内容?

2024-01-03

Given a System.Net.Http.HttpResponseMessage,我可以通过我的请求获得相当多的信息response.RequestMessage, 例如

response.RequestMessage.RequestUri // the url of the request
response.RequestMessage.Method     // the HTTP method

但是,我无法找到一种方法来从中获取有用的东西

response.RequestMessage.Content    // a StringContent instance

我查看了属性树StringContent,但我不知道如何以在监视窗口中工作的方式将其内容作为常规字符串获取。

有什么建议么?


分析System.Net.Http.dll v2.2.29.0 https://api.nuget.org/packages/microsoft.net.http.2.2.29.nupkg with ILSpy http://ilspy.net/表明System.Net.Http.HttpClientHandler.CreateResponseMessage(初始化一个HttpResponse对象)不会对相应的对象执行任何操作HttpRequest's .Content。这意味着如果不是null首先,内容对象本身应该仍然可用。

System.ObjectDisposedException https://msdn.microsoft.com/ru-ru/library/system.objectdisposedexception%28v=vs.100%29.aspx被抛出“当对已处理的对象执行操作时。”“处置对象”是什么意思?System.Net.Http.StringContent事实证明实施System.IDisposable通过它的祖先,System.Net.Http.HttpContent。 所以,它实际上意味着"an IDisposable在其之后.Dispose()方法被调用。”

自然而然地寻找HttpContent.Dispose()用户带我们去罪魁祸首——System.Net.Http.HttpClient.SendAsync()那个叫System.Net.Http.HttpClient.DisposeRequestContent()发送数据后。


现在,关于该怎么做。所有这些HttpContent.Dispose()所做的就是关闭对象的流并设置一个标志。然而,StreamContent(或者更确切地说是它的父级,ByteArrayContent) 将数据保存在.content field——这不受影响的性格!

唉,直接读取的两种方法都是protected,以及所有使用这些方法的公共方法首先检查标志。所以,阅读它的唯一方法就是反思(插图是在 IronPython 中,注释是针对 C# 等效项给出的):

>>> sc=System.Net.Http.StringContent("abcdefghijklmnopqrstuvwxyz")
#in C#, the following is `type(StringContent)' (this is what it actually does)
>>> scd=System.Reflection.TypeDelegator(System.Net.Http.StringContent)
>>> print scd.GetField("content",System.Reflection.BindingFlags.NonPublic|System.Reflection.BindingFlags.Instance)
None     #because the field is in ByteArrayContent and is private
>>> bacd=System.Reflection.TypeDelegator(System.Net.Http.ByteArrayContent)
>>> bacd.GetField("content",System.Reflection.BindingFlags.NonPublic|System.Reflection.BindingFlags.Instance)
<System.Reflection.RtFieldInfo object at 0x000000000000002C [Byte[] content]>
# `_' is last result
>>> _.GetValue(sc)
Array[Byte]((<System.Byte object at 0x000000000000002D [97]>, <System.Byte objec
t at 0x000000000000002E [98]>, <System.Byte object at 0x000000000000002F [99]>,
<...>

在 C# 中,这看起来像:

type(ByteArrayContent)
    .GetField("content",BindingFlags.NonPublic|BindingFlags.Instance)
    .GetValue(content)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

给定一个 HttpResponseMessage,如何读取请求的内容? 的相关文章

  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • 如何将非静态类成员“std::bind”绑定到 Win32 回调函数“WNDPROC”?

    我正在尝试将非静态类成员绑定到标准WNDPROC http msdn microsoft com en us library ms633573 aspx功能 我知道我可以通过将类成员设为静态来简单地做到这一点 但是 作为一名 C 11 ST
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 在 LINQ 中按 Id 连接多表和分组

    我想按categoryId显示列表产品的名称组 这是我的代码 我想要我的视图显示结果 Desktop PC HP Red PC Dell Yellow PC Asus Red SmartPhone Lumia 720 Blue 我的组模型
  • 在 C 中匹配二进制模式

    我目前正在开发一个 C 程序 需要解析一些定制的数据结构 幸运的是我知道它们是如何构造的 但是我不确定如何在 C 中实现我的解析器 每个结构的长度都是 32 位 并且每个结构都可以通过其二进制签名来识别 举个例子 有两个我感兴趣的特定结构
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 为什么 Google 测试会出现段错误?

    我是 Google Test 的新手 正在尝试提供的示例 我的问题是 当我引入失败并设置GTEST BREAK ON FAILURE 1 或使用命令行选项 GTest 将出现段错误 我正在考虑这个例子 https code google c
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • Azure 辅助角色“请求输入之一超出范围”的内部异常。

    我在辅助角色中调用 CloudTableClient CreateTableIfNotExist 方法 但收到一个异常 其中包含 请求输入之一超出范围 的内部异常 我做了一些研究 发现这是由于将表命名为非法表名引起的 但是 我尝试为我的表命
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • Oracle Data Provider for .NET 不支持 Oracle 19.0.48.0.0

    我们刚刚升级到 Oracle 19c 19 3 0 所有应用程序都停止工作并出现以下错误消息 Oracle Data Provider for NET 不支持 Oracle 19 0 48 0 0 我将 Oracle ManagedData
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 如何为特定控件创建自己的自定义提示?

    我需要为特定控件 而不是整个应用程序 创建一个自定义提示窗口 具有自己的颜色和布局 提示文本本身不会连接到该特定的Hint财产控制 按照建议 我编写了一个处理程序CM HINTSHOW 如果控件有此功能 则此方法有效ShowHint Tru
  • 找出与 Elastic Beanstalk 应用程序关联的 EC2 实例?

    有没有办法从仪表板找出与我的 Elastic Beanstalk 应用程序关联的 EC2 实例 我检查了 配置 下的每个页面 但找不到有关运行该应用程序的 EC2 实例的任何信息 您无法通过 Elastic Beanstalk 仪表板查看关
  • C++ 一个带有结构数组的类,不知道我需要多大的数组

    我有一个带有字段的类like名字 年龄 学校等 我需要能够存储其他信息 例如他们旅行过的地方以及旅行的年份 我无法专门声明另一个类来保存 TravelDestination 和年份 所以我认为有一个结构体可能是最好的 这只是一个例子 str
  • Java Scanner - 将换行符读取到字符串中?

    我有一个扫描仪 它接受用户输入 直到按 ctrl d 然后是一个 while 循环 将每个单词添加到字符串中 然后打印它 但我想知道如何在字符串中包含像 n 这样的新行指示符凡是有新行的地方 Scanner sc new Scanner S
  • Node.js async.forEach:无法读取未定义的属性“值”

    我有一种感觉 我犯了一个明显的错误 但找不到它 我得到的错误是 node modules async lib async js 194 iterator x value function err v TypeError Cannot rea
  • 如何在 Rust 中强制恢复被阻止读取文件的线程?

    因为 Rust 没有以非阻塞方式读取文件的内置功能 所以我必须生成一个读取文件的线程 dev input fs0为了获得操纵杆事件 假设操纵杆未使用 没有任何内容可读取 因此读取线程在读取文件时被阻塞 有没有办法让主线程强制恢复读取线程的阻
  • 监听 Flutter 中设备方向的变化

    我正在寻找一种监听手机方向变化的方法 目的是在手机横向时隐藏某些内容 我的布局目前仅按预期以纵向显示 但我希望我的应用程序在设备旋转到横向时执行某些操作 同时保持纵向布局 我尝试过使用OrientationBuilder 但这仅在布局更改为
  • Java 应用程序服务器性能

    我有一个在 Sun Application Server 8 1 又名 SJSAS Glassfish 的前身 上运行的有点过时的 Java EE 应用程序 当有 500 多个并发用户时 应用程序变得慢得令人无法接受 我正在尝试帮助确定大部
  • 如何提取 Instagram 数据

    我正在尝试构建 Instagram 帐户的 Microsoft Access 数据库 并希望提取以下数据等 帐户名称 关注者数量 关注人数 帖子数量 及其日期 图片点赞数 图片评论数 我在构建数据库方面没有任何问题 但想知道是否有一种更简单
  • 如何使 tkinter 画布矩形透明?

    我需要使我的 tkinter 矩形透明 有谁知道这是怎么做到的吗 我试图指定alpha 5 opacity 5 并且我尝试在颜色代码的末尾添加两位数字 fill ff000066 这些东西似乎都不起作用 我找不到正确的语法 import t
  • 在 Ruby on Rails 中将 DateTime 转换为简单日期

    我在数据库中有一个日期时间列 当我向用户显示它时 我想将其转换为一个简单的日期 我怎样才能做到这一点 def shown date to date does not exist but is what I am looking for se
  • php cURL CURLOPT_VERBOSE 不显示有效负载

    虽然curl 的以下输出提供了有用的标头信息 但它不提供有效负载信息 例如 我想在提供的调试信息中看到 jason index json value 1 是否可以以详细模式内联显示有效负载 2 查看 cURL 处理的发送有效负载的最佳方式是
  • Rselenium 中的 rsDriver() 不起作用

    我已将 r 更新到最新版本 并再次安装了 Rselenium 我尝试使用 rsDriver 但端口 4567 有问题 与this https stackoverflow com questions 42316527 probem runni
  • 生成随机长数

    我知道要生成随机长数 我在 Java 中执行以下步骤 Random r new Random return r nextLong 这段代码在 C 中相当于什么 像这样 return long rand
  • 有人对从 ColdFusion 的 serializeJSON 方法到 PHP 的 json_decode 的问题有疑问吗?

    互联网对此没有任何帮助 我们使用 ColdFusion 编码数据serializeJSON并尝试使用 PHP 对其进行解码json decode 大多数时候 这工作得很好 但在某些情况下 json decode回报NULL 我们已经寻找了明
  • WPF 中现有控件的 ControlTemplate

    如何以XAML格式 可视化树 获取WPF中现有控件的ControlTemplate 这是为了帮助在现有模板的帮助下创建新的 ControlTemplate 查看风格窥探者 https github com drewnoakes style
  • Android SQLite - 命名参数

    我正在开发使用 SQLite 作为本地存储的 Android 应用程序 我需要在 sql 查询中使用参数 但我发现的所有示例都包含未命名的参数 如下所示 INSERT INTO SomeTable ColA ColB ColC VALUES
  • facebookConnectPlugin 未定义(ngCordova、Ionic 应用程序)

    我正在尝试将本机 fb 连接添加到我的离子应用程序 我在用着 离子 恩科尔多瓦 http ngcordova com docs plugins facebook http ngcordova com docs plugins faceboo
  • 跨多个标签获取选择和环绕内容

    我有一个脚本可以更改所选文本的背景颜色 但是 当跨多个元素 标签选择文本时 我遇到了问题 我得到的代码是 var text window getSelection getRangeAt 0 var colour document creat
  • 给定一个 HttpResponseMessage,如何读取请求的内容?

    Given a System Net Http HttpResponseMessage 我可以通过我的请求获得相当多的信息response RequestMessage 例如 response RequestMessage RequestU