Web api 和 Web api 2 之间的 PushStreamContent 有什么不同?

2023-12-31

我创建了两个相同的 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/ http://www.strathweb.com/2013/01/asynchronously-streaming-video-with-asp-net-web-api/

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

但是,当我在 VS 2013 项目中执行相同的步骤时,出现以下两个错误:

Error 1
以下方法或属性之间的调用是不明确的: 'PushStreamContent(系统.Func<Stream,HttpContent,TransportContext,Task>, MediaTypeHeaderValue)' 和 'PushStreamContent(系统.Action<System.IO.Stream,HttpContent,TransportContext>, MediaTypeHeaderValue)'

Error 2
'void video_stream.Controllers.VideoStream.WriteToStream(System.IO.Stream, System.Net.Http.HttpContent, System.Net.TransportContext)' 返回类型错误

所以我的猜测是错误 2 是真正的问题,因为这段代码:

公共异步无效WriteToStream(流输出流,HttpContent内容,TransportContext上下文){...}

未被识别为<action>web api 1 和 2 之间还有吗?我在这里真的很困惑,因为我的目标是相同的框架,而且我似乎无法在如何修复它方面做出直观的飞跃。我尝试更改 WriteToStream 签名都失败了。

有谁知道我需要什么才能让 PushStreamContent 接受 Web api 2 或 VS 2013 或新的 C# 中的 WriteToStream 或此代码中的差异在哪里?


PushStreamContent 构造函数的签名已更改。它的 onStreamAvailable 参数是 Action 或 Func 泛型类型。问题在于编译器不知道要绑定到哪种类型。

因此,要解决该错误,请将streamAvailableHandler转换为Action:

response.Content = new PushStreamContent((Action<Stream, HttpContent, TransportContext>)streamAvailableHandler);

处理程序方法将是:

private void streamAvailableHandler(Stream stream, HttpContent content, TransportContext context) {
  ...write to stream
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web api 和 Web api 2 之间的 PushStreamContent 有什么不同? 的相关文章

随机推荐