c# - HTTP 请求中没有正文时的流行为
问题描述
使用 Azure Functions .Net 5 和SDK,当请求没有正文时,属性Microsoft.Azure.Functions.Worker.Http
的预期行为是什么?HttpRequestData.Body
是null
,是,是Stream.Empty
,别的什么吗?
- 该文档没有帮助,因为它只是说:“包含 HTTP 正文数据的流”。
- Azure Functions Core 5 于今年发布,可用信息很少。
- 有关于如何使用 ASP Core 3 读取正文请求的信息,但这不是 .NET 5,我不确定 Azure Functions 的行为方式是否与 ASP 相同。
- 到目前为止,我无法将调试器附加到已发布的 Function Host,这使诊断变得复杂。
解决方案
HttpRequestData.Body
当请求没有正文时,财产的预期行为是什么?
作为字节串的原始 HTTP 请求正文。这对于以不同方式处理数据(例如加载数据、解析等)很有用。请求中消息体的存在是通过在请求的消息头中包含 Content-Length 或 Transfer-Encoding 头字段来表示的。如果 content-length 为空,则读取的请求不返回任何可读取的内容。EOF
如果(Function) 返回类型无效,有时会引发错误。
使用 azure 函数从 asp.net core 5 读取 http 请求正文
- 创建 Asp.Net Core 5 Project 和 Azure Functions 隔离环境
- 在包/依赖项中添加它们的每个引用。您需要将
target framework
Microsoft SDK 版本从 3.1 更改为 5,因为默认情况下它是在 Azure Functions 的 3.1 中创建的csproj
。
我们需要在 Core 项目中的 local.setting.json 文件和 Program.cs 文件中进行更改,以读取 Http 请求正文。参考这个和这个一步一步的过程!
在HttpRequestBody中,Content-length
: 一些数值(但不是零)指定 HttpRequest 的结尾及其长度。如果Content-Length: 0
,则HttpRequestData包含像 {} 这样的空正文。
如果两个 (" Content-Length
" / " Transfer-Encoding: chunked
") 都不存在,则“连接结束”表示请求结束。
大多数 HTTP 请求都是没有正文的 GET 请求。但是,使用主体模拟请求对于适当地强调代理代码和测试处理此类请求的各种钩子很重要。大多数带有正文的 HTTP 请求使用 POST 或 PUT 请求方法。
有关 HttpRequestBody 的更多信息 - 请参阅此
推荐阅读
- node.js - 如何使用节点配置 ssl
- javascript - React + Redux + Thunk + Axios 应用程序中最好的数据建模策略是什么?
- python - 如何理解卡方列联表
- batch-file - 批处理文件将文件从文本文件中的源移动到另一个文本文件中的多个文件夹
- c# - 使用 c# windows 窗体从 combobox.selectedvalue 触发动作
- c++ - C ++:具有成员字段作为地址的用户定义类
- angular - 当我 console.log 类它返回 null
- javascript - abc.filter().map() ==> to reduce() 应该怎么用?JavaScript
- node.js - Watson-discovery 和 Nodejs:我的查询没有得到预期的答案
- python-3.x - 过滤同时借给借款人但不在同一笔贷款中的一对贷方