任务<IEnumerable的<httpcontent>&GT; WebAPI文件上传中的vs Task <multipartmemorystreamprovider> </multipartmemorystreamprovider> </ienumerable <httpcontent>

时间:2013-08-21 14:38:38

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

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

因此,Visual Studio 2010咆哮着说,task.Result.Contents不起作用,因为任务不包含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将他视为不同的任务&lt;&gt;比我的类型?我如何改变我的匹配,以便编译和工作?

TIA

1 个答案:

答案 0 :(得分:0)

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