我正在关注我的一位老同事前段时间编写的一些代码,以尝试使用 WebAPI 设置文件上传过程。在他的代码中,方法签名中创建的任务是 type 的任务,Task<MultipartMemoryStreamProvider>
而在我的代码中,它是 type的任务Task<IEnumerable<HttpContent>>
。
因此,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