我正在使用邮递员测试我的.net 核心 API,当我试图通过 postman form-data 发布数据时,即使我将 Content-Type 标头设置为 application/json,这也会返回 415,因为此问题的常见解决方案似乎在线。如果我通过 raw postman 选项触发没有任何文件的请求并将内容类型设置为 JSON(application/json),则此请求将成功到达 API。
以下是我的 API 的外观:
[HttpPost("{organization}")]
public IActionResult Post([FromBody] Asset asset, string organization)
{
//Api body
//Get files from request
Task uploadBlob = BlobFunctions.UploadBlobAsync(_blobContainer,Request.Form.Files[0]);
}
以下是失败的邮递员请求的样子
以及该请求的标头
我还缺少什么才能工作?
小更新
如果我删除[FromBody]Asset asset
并只传递文件,这工作正常
2 回答
尝试使用[1]属性而不是[2]属性:
我不能肯定地说,但我的猜测是,在 postman 中,因为你正在发出一个 form-data 请求,你的 content-type 最终会变成“multipart/form-data”(如果你在处理它时调试请求,你可以看到即使您将其设置为 application/json,内容类型也会更改为 multipart。
但是在 Controller 的 POST 操作中,您指定期望来自正文的 Asset 对象(默认情况下需要 JSON 对象)。所以你得到一个 415,因为你的请求的内容类型是多部分,而你的 API 期望 application/json,因为你使用了[5]属性。
事实证明,由于一些奇怪的原因,我不允许将它们中的任何一个作为我的控制器的变量传递,但如果我从
Request
中检索它们,它就可以工作。并为文件
不知道为什么会这样,如果有人可以向我解释这一点,我会很感激,但这似乎解决了我的问题。