【发布时间】:2021-08-26 13:04:53
【问题描述】:
我正在努力绑定在 http 请求正文中发送的二进制数据。
我在 Asp Net core (NetCore 2.1) 中有以下控制器:
[HttpPost]
[Consumes("image/png", System.Net.Mime.MediaTypeNames.Application.Pdf, System.Net.Mime.MediaTypeNames.Image.Tiff)]
[Route("test")]
public IActionResult Test(IFormFile file)
{
return Ok(file.Length);
}
目的是接收字节流并将其绑定到名为“文件”的参数。问题是 IFormFile 变量为空。事实上,通过在控制器中放置断点,Route 可以完美运行,但是一旦我尝试访问“文件”变量,它就会引发空指针异常。
我怀疑它的工作方式。如果我访问 Request 对象,我可以毫无问题地读取数据流。但我认为这不是正确的做法。
示例:
[HttpPost]
[Consumes("image/png", "image/bmp", System.Net.Mime.MediaTypeNames.Application.Pdf, System.Net.Mime.MediaTypeNames.Image.Tiff)]
[Route("test")]
public IActionResult Test(IFormFile binary)
{
var x = new System.Drawing.Bitmap(Request.Body);
x.Save(".\\file.bmp");
return Ok("Image height: " + x.Height.ToString());
}
如何在我的控制器中绑定以二进制形式发送的数据?
以下是邮递员发送的请求示例:
postman screenshot
raw request
附:尽管我知道在多部分形式中接收数据会更好,但我很愿意以二进制形式接收数据
【问题讨论】:
-
如果你想绑定二进制到IFormFile二进制,你可以尝试使用custom model binding。
-
@YiyiYou 感谢您的建议,但我确实找到了我想要的东西
标签: c# api asp.net-core controller