【问题标题】:Task<IEnumerable<HttpContent>> vs Task<MultipartMemoryStreamProvider> in WebAPI file uploadsWebAPI 文件上传中的 Task<IEnumerable<HttpContent>> 与 Task<MultipartMemoryStreamProvider>
【发布时间】:2013-08-23 07:27:41
【问题描述】:

我正在关注我的一位老同事前段时间编写的一些代码,以尝试使用 WebAPI 设置文件上传过程。在他的代码中,在方法签名中创建的任务是Task&lt;MultipartMemoryStreamProvider&gt; 类型的任务,而在我的代码中,它是Task&lt;IEnumerable&lt;HttpContent&gt;&gt; 类型的任务。

因此,Visual Studio 2010 对我咆哮说 task.Result.Contents 不起作用,因为 task 不包含 Result 的定义,也不包含 Contents 的定义。它还说返回值不起作用,因为它想要返回 void 并且我正在尝试返回一个响应对象。这是我的方法,它或多或少是从我正在使用的示例中复制和粘贴的:

public Task<ImageResponseModel> Post()
        {
            if (!Request.Content.IsMimeMultipartContent("form-data"))
            {
                throw new NotSupportedException("Must be multi-part request");
            }

            return Request.Content.ReadAsMultipartAsync().ContinueWith(task =>
            {
                var model = new ImageModel();

                foreach (HttpContent content in task.Result.Contents)
                {
                    if (content.Headers.ContentDisposition.Name == "\"UserName\"")
                    {
                        model.UserName = content.ReadAsStringAsync().Result.ToString();
                    }
                    else if (content.Headers.ContentDisposition.Name == "\"Caption\"")
                    {
                        model.Caption = content.ReadAsStringAsync().Result.ToString();
                    }
                    else if (content.Headers.ContentDisposition.Name == "\"Image\"")
                    {
                        model.Image = content.ReadAsByteArrayAsync().Result;
                    }
                }

                return DoEntry(model);
            });
        }

        [AcceptVerbs("")]
        public ImageResponseModel DoEntry(ImageModel model)
        {
            ImageResponseModel mod = new ImageResponseModel();

            return mod;
        }

ImageResponseModel 本质上也只是从示例中复制和粘贴,它只有两个属性与 get/set。 ImageModel 也或多或少只是具有三个属性(两个字符串属性和一个 byte[] 属性(用于实际文件)的复制和粘贴。

我在这里做错了什么?为什么 VS 认为他的 Task 类型与我的不同?我怎样才能改变我的以匹配他的,以便它能够编译和工作?

TIA

【问题讨论】:

    标签: c#-4.0 asp.net-mvc-4 file-upload asp.net-web-api task


    【解决方案1】:

    我在 VS 2012 中重新创建了我的项目,现在它工作正常。我想我在 2010 年的安装中一定有一些旧库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多