[英]C# Core 1.1 Web API Receive zip file
我创建了Web API端点来接收看起来像这样的zip文件
[HttpPut()]
[Consumes("application/zip")]
public async Task<IActionResult> ImportZip()
{
var zipFile = HttpContext.Request.Form.Files.FirstOrDefault();
....
但我收到异常“ System.InvalidOperationException:错误的内容类型:应用程序/邮政编码”
我做错了什么? 谢谢!
编辑请求实际上通过[Consumes(“ application / zip”)]属性传递,但在“ HttpContext.Request.Form.Files.FirstOrDefault();”上崩溃
EDIT2好,所以当我在请求中未放置任何标头并删除了[Consumes(“ application / zip”)]属性时,终于可以成功接收文件。 在Request.Form.Files
我的文件的类型为“ application / x-zip-compressed”,但是当我尝试在标头content-type和Consumes属性中使用它时,出现相同的崩溃System.InvalidOperationException: Incorrect Content-Type: application/x-zip-compressed
邮递员将multipart/form-data
作为Content-Type
。 通常,只有在Web api操作必须支持多种内容类型时或者在不支持特定内容类型时才指定Consumes
属性。
由于您的Web api操作取决于HttpContext.Request.Form.Files
因此Content-Type
无论如何都必须是multipart/form-data
。
仅允许zip文件的最佳选择是尝试对其进行解析。 如果失败,则说明上传了错误的文件。
[HttpPut("api/import")]
public IActionResult ImportZip()
{
var file = Request.Form.Files.FirstOrDefault();
if (file == null)
return BadRequest();
try
{
using (var zip = new ZipArchive(file.OpenReadStream()))
{
// do stuff with the zip file
}
}
catch
{
return BadRequest();
}
return Ok();
}
另一个选择是检查文件的BOM(字节顺序标记) 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.