[英]Compilation error on Custom MediaTypeFormatter with .Net 4, Web API and Visual Studio 2010
I am implementing a custom MediaTypeFormatter and I am getting a compilation error on the overriden method ReadFromStreamAsync as shown in the code example. 我正在实现自定义MediaTypeFormatter,并且在重写方法ReadFromStreamAsync上遇到编译错误,如代码示例所示。 For work reasons I can't update to Visual Studio 2012 and use .net 4.5 unfortunately:
出于工作原因,不幸的是,我无法更新到Visual Studio 2012并使用.net 4.5:
ImageMediaFormatter.ReadFromStreamAsync(System.Type, System.IO.Stream, System.Net.Http.HttpContent, System.Net.Http.Formatting.IFormatterLogger)': not all code paths return a value 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();
}
}
}
好的, ReadFromStreamAsync()
方法必须返回Task<object>
但是您已经注释了return
语句(它可能应该只是return task;
),因此显然不会编译。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.