asp.net-web-api – 与web api和web api 2之间的PushStreamContent有什么区别?

我已经创建了两个相同的Web api项目,一个在VS 2012中,另一个在VS 2013中,都以4.5 .NET框架为目标.这些项目是基于Filip W的视频下载教程,在这里找到:
http://www.strathweb.com/2013/01/asynchronously-streaming-video-with-asp-net-web-api/

复制&将教程中的代码粘贴到VS 2012项目(使用web api 1?)不产生错误(在添加正确的“using”语句之后).

但是,当我在VS 2013项目中遵循相同的步骤时,我会收到以下两个错误

Error 1
The call is ambiguous between the following methods or properties:
‘PushStreamContent(System.Func<Stream,HttpContent,TransportContext,Task>,MediaTypeHeaderValue)’
and
‘PushStreamContent(System.Action<System.IO.Stream,TransportContext>,MediaTypeHeaderValue)’

Error 2
‘void video_stream.Controllers.VideoStream.WritetoStream(System.IO.Stream,System.Net.Http.HttpContent,System.Net.TransportContext)’ has the wrong return type

所以我的猜测是错误2是这个代码的真正问题:

public async void WritetoStream(Stream outputStream,HttpContent content,TransportContext context) {…}

未标识为< action> web api 1& 2?我真的很困惑,因为我正在针对同一个框架,我似乎无法直观的跨越如何解决它.我改变WritetoStream签名的尝试都失败了.

有没有人知道我需要什么来获取PushStreamContent来接受Web api 2或VS 2013或新的C#中的WritetoStream或者这个代码的区别在哪里生活的线索?

解决方法

我不知道这是否是Web API中的一个错误,我们将进行调查.同时您可以尝试以下解决方法
response.Content = new PushStreamContent(async (Stream outputStream,TransportContext context) =>
{
    try
    {
        var buffer = new byte[65536];

        using (var video = File.Open(filename,FileMode.Open,FileAccess.Read))
        {
            var length = (int)video.Length;
            var bytesRead = 1;

            while (length > 0 && bytesRead > 0)
            {
                bytesRead = video.Read(buffer,Math.Min(length,buffer.Length));
                await outputStream.WriteAsync(buffer,bytesRead);
                length -= bytesRead;
            }
        }
    }
    finally
    {
        outputStream.Close();
    }
});

注意:我做了另一个改变(删除了catch块)到代码来允许异常传播.这样,您的客户知道在服务中发生了一些错误,否则他们会假设一切顺利.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....