C# 使用.Net 4、Web API和Visual Studio 2010的自定义MediaTypeFormatter上的编译错误

C# 使用.Net 4、Web API和Visual Studio 2010的自定义MediaTypeFormatter上的编译错误,c#,asp.net-mvc-4,.net-4.0,asp.net-web-api,C#,Asp.net Mvc 4,.net 4.0,Asp.net Web Api,我正在实现一个自定义MediaTypeFormatter,并且在重写的ReadFromStreamAsync方法上出现编译错误,如代码示例所示。由于工作原因,我无法更新到Visual Studio 2012并使用.net 4.5。很遗憾: ImageMediaFormatter.ReadFromStreamAsync(System.Type、System.IO.Stream、System.Net.Http.HttpContent、System.Net.Http.Formatting.IForma

我正在实现一个自定义MediaTypeFormatter,并且在重写的ReadFromStreamAsync方法上出现编译错误,如代码示例所示。由于工作原因,我无法更新到Visual Studio 2012并使用.net 4.5。很遗憾:

ImageMediaFormatter.ReadFromStreamAsync(System.Type、System.IO.Stream、System.Net.Http.HttpContent、System.Net.Http.Formatting.IFormatterLogger)):并非所有代码路径都返回值

public class ImageMediaFormatter : MediaTypeFormatter
{
    public ImageMediaFormatter()
    {
        SupportedMediaTypes.Add(new MediaTypeHeaderValue("image/jpeg"));
        SupportedMediaTypes.Add(new MediaTypeHeaderValue("image/jpg"));
        SupportedMediaTypes.Add(new MediaTypeHeaderValue("image/png"));
        SupportedMediaTypes.Add(new MediaTypeHeaderValue("multipart/form-data"));
    }

    public override bool CanReadType(Type type)
    {
        return type == typeof(ImageMedia);
    }

    public override bool CanWriteType(Type type)
    {
        return false;
    }

    public override Task<object> ReadFromStreamAsync(
        Type type, Stream stream, HttpContent request,
        IFormatterLogger formatterContext)
    {

        if (!request.IsMimeMultipartContent())
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }

        var streamProvider = new MultipartMemoryStreamProvider();
        var task = request.ReadAsMultipartAsync(streamProvider)
            .ContinueWith(
               t =>
               {
                   var content = streamProvider.Contents.First(x =>
                    SupportedMediaTypes.Contains(x.Headers.ContentType));

                   string fileName = content.Headers.ContentDisposition.FileName;
                   string mediaType = content.Headers.ContentType.MediaType;

                   var imgstream = content.ReadAsStreamAsync().ContinueWith(x =>
                                                                                {
                                                                                    byte[] imagebuffer = ReadFully(x.Result);
                                                                                    return new ImageMedia(fileName, mediaType, imagebuffer);  
                                                                                });




               }
         );

        //return task.Result;

    }

    private byte[] ReadFully(Stream input)
    {
        byte[] buffer = new byte[16*1024];
        using (MemoryStream ms = new MemoryStream())
        {
            int read;
            while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }
            return ms.ToArray();
        }
    }
}
公共类ImageMediaFormatter:MediaTypeFormatter
{
公共ImageMediaFormatter()
{
添加(新的MediaTypeHeaderValue(“图像/jpeg”);
添加(新的MediaTypeHeaderValue(“image/jpg”);
添加(新的MediaTypeHeaderValue(“image/png”);
添加(新的MediaTypeHeaderValue(“多部分/表单数据”);
}
公共覆盖布尔CanReadType(类型)
{
返回类型==类型(ImageMedia);
}
公共重写bool CanWriteType(类型)
{
返回false;
}
公共重写任务ReadFromStreamAsync(
类型类型,流,HttpContent请求,
IFormatterLogger格式化程序(上下文)
{
如果(!request.IsMimeMultipartContent())
{
抛出新的HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var streamProvider=新的MultipartMemoryStreamProvider();
var task=request.ReadAsMultipartAsync(streamProvider)
.继续(
t=>
{
var content=streamProvider.Contents.First(x=>
SupportedMediaTypes.Contains(x.Headers.ContentType));
字符串文件名=content.Headers.ContentDisposition.fileName;
字符串mediaType=content.Headers.ContentType.mediaType;
var imgstream=content.ReadAsStreamAsync().ContinueWith(x=>
{
字节[]imagebuffer=已读(x.Result);
返回新的ImageMedia(文件名、媒体类型、imagebuffer);
});
}
);
//返回任务。结果;
}
私有字节[]已就绪(流输入)
{
字节[]缓冲区=新字节[16*1024];
使用(MemoryStream ms=new MemoryStream())
{
int-read;
而((read=input.read(buffer,0,buffer.Length))>0)
{
ms.Write(缓冲区,0,读取);
}
返回ToArray女士();
}
}
}

嗯,
ReadFromStreamAsync()
方法必须返回一个
任务
,但是您已经注释掉了
return
语句(它可能只是
return Task;
),所以显然它不会编译