HttpClient和PushStreamContent我将PushStreamContent与我的RESTAPI(ASP.NETWebAPI)一起使用,效果很好。HttpClient可以在服务器处理完整请求之前请求资源并获得HTTP响应(服务器仍然写入推送流)。作为HttpClient,您必须做一件小事:使用HttpCompletionOption.ResponseHeadersRead。现在我的问题是:是否有可能以另一种方式?从HttpClient->通过推流将数据上传到webapi?我在下面实现了它,但是webapi在客户端关闭流之前不会收到请求。varasyncStream=newAsyncStream(fs);PushStreamContentstreamContent=newPushStreamContent(asyncStream.WriteToStream);内容。添加(流内容);HttpResponseMessageresponse=awaitc./localhost/..."){Content=content},HttpCompletionOption.ResponseHeadersRead);response.EnsureSuccessStatusCode();AsyncStream是我的代表类:publicasyncvoidWriteToStream(StreamoutputStream,HttpContentcontent,TransportContextcontext)这是用于Push-流是必要的。这可能吗?在最后一个字节写入流之前,HttpClient不会将请求发送到Webapi...我需要做什么?问题出在客户端还是服务器/asp.netwebapi端?编辑:这是WriteToStream的实现(但我不使用磁盘中的文件,使用内存流“myMemoryStream”(在构造函数中传递):publicvoidWriteToStream(StreamoutputStream,HttpContentcontent,TransportContextcontext){try{varbuffer=newbyte[4096];using(varstream=myMemoryStream){varbytesRead=1;while(bytesRead>0){bytesRead=video.Read(buffer,0,buffer.Length);outputStream.Write(buffer,0,bytesRead);}}}catch(HttpExceptionex){return;}finally{outputStream.Close();}}也许我必须做点什么:HttpContent内容,TransportContext上下文?我找到了解决问题的办法:我想set:httpWebRequest.AllowReadStreamBuffering=false;HttpClient4.0默认做缓冲,你无权访问属性AllowReadStreamBuffering,所以你必须直接使用HttpWebRequest。(或者您可以使用HttpClinet4.5,默认行为是“流”):http://www.strathweb.com/2012/09/dealing-with-large-files-in-asp-net-web-api/6。使用HttpClient)第二个问题是fiddler:Fiddler目前只支持响应流而不是请求(Fiddler使HttpWebRequest/HttpClient行为异常)对我有用的解决方案:HttpWebRequesthttpWebRequest=HttpWebRequest.Create(...)httpWebRequest.Method="POST";httpWebRequest.Headers["Authorization"]="Basic"+...;httpWebRequest.PreAuthenticate=true;httpWebRequest.AllowWriteStreamBuffering=false;httpWebRequest.AllowReadStreamBuffering=false;httpWebRequest.ContentType="application/octet-stream";Streamst=httpWebRequest.GetRequestStream();st.Write(b,0,b.Length);st.Write(b,0,b.Length);//...任务响应=httpWebRequest.GetResponseAsync();varx=response.Result;流resultStream=x.GetResponseStream();//...读取结果流...确保实现requestMessage.Headers.TransferEncodingChunked=true;在你的请求消息中......原因是如果你不设置这个,HttpClient会缓冲客户端本身的全部内容,以便计算出请求的内容长度,这是不是你注意到你的webapi在写入流时没有立即调用服务的原因...以上就是C#学习教程的全部内容:HttpClient和PushStreamContent,如果对大家有用需要了解一下更多关于C#学习教程,希望大家多加关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
