asp.net-core - 如何绑定没有 Content-Type Web API .Net core 2.1 的 POST 请求?
问题描述
我试图捕获服务器发送给我的 HTTP 请求中包含的 XML,但 HTTP 不包含 Content-Type。我无权访问服务器,因此无法添加 Content-Type。
如果我尝试将请求正文与 [FromBody] 绑定,则会收到 415 Unsupported Media Type 错误
[HttpPost("voicebiometricsengine")]
public async Task<IActionResult> VoiceBiometricsEngine([FromBody] XmlDocument analytics)
{
return Ok();
}
如果我尝试将正文作为字符串,则字符串为 Null
[HttpPost("voicebiometricsengine")]
public async Task<IActionResult> VoiceBiometricsEngine(string analytics)
{
return Ok();
}
解决方案
如果没有内容类型,框架在尝试与您的方法参数绑定时不知道如何解析正文。
一种选择是在方法内部手动读取请求正文
[HttpPost("voicebiometricsengine")]
public async Task<IActionResult> VoiceBiometricsEngine(string analytics)
{
using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
{
var body = await reader.ReadToEndAsync();
}
return Ok();
}
推荐阅读
- javascript - 使用表格替换句子中的单词
- mysql - 在两个不同的表(不包括要连接的表)上添加连接条件是否会降低查询和性能
- java - 从java插入到oracle
- java - 测试数组中的数字是否重复,然后将其删除
- mysql - 如何使所有数据库记录以特定值开头?
- github - 将 GitHub 项目卡分配给特定用户
- vue.js - 如何使用 jest 使测试覆盖率显示 Vue-cli 3 中的所有 vue 文件
- asynchronous - async/await - 在 future() 之前不等待 - Dart
- angular - Firestore orderBy 布尔值和时间戳
- sql - 引用表“factIngresosCurso”中没有与引用列匹配的主键或候选键