繁体   English   中英

C#Core 1.1 Web API接收zip文件

[英]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

您可以使用IFormFile传输您的zip。 您的WebApi端点必须更新为此:

 [HttpPut]
 [Consumes("multipart/form-data")]
 public void Put(IFormFile file)
 {
    var stream = file.OpenReadStream();
 }

邮递员的请求应如下所示(您不需要Content-Type标头,因为它可以根据请求进行解析):

在此处输入图片说明

邮递员将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM