相关疑难解决方法(0)

在调用ReadAsStreamAsync时何时或何时调用HttpResponseMessage?

我正在使用它System.Net.Http.HttpClient做一些客户端HTTP通信.我在一个地方得到了所有的HTTP,从其余的代码中抽象出来.在一个实例中,我想将响应内容作为流读取,但是流的使用者与HTTP通信发生的位置以及流被打开的情况很好地隔离.在负责HTTP通信的地方我处理所有的HttpClient东西.

此单元测试将失败Assert.IsTrue(stream.CanRead):

[TestMethod]
public async Task DebugStreamedContent()
{
    Stream stream = null; // in real life the consumer of the stream is far away 
    var client = new HttpClient();        
    client.BaseAddress = new Uri("https://www.google.com/", UriKind.Absolute);

    using (var request = new HttpRequestMessage(HttpMethod.Get, "/"))
    using (var response = await client.SendAsync(request))
    {
        response.EnsureSuccessStatusCode();
        //here I would return the stream to the caller
        stream = await response.Content.ReadAsStreamAsync();
    }

    Assert.IsTrue(stream.CanRead); // FAIL if response is disposed so is the stream …
Run Code Online (Sandbox Code Playgroud)

.net c# idisposable stream dotnet-httpclient

37
推荐指数
3
解决办法
2万
查看次数

避免处理底层流

我正在尝试模拟一些文件操作.在我的"真实"对象中:

StreamWriter createFile( string name )
{
  return new StreamWriter( Path.Combine( _outFolder, name ), false, Encoding.UTF8 ) );
}
Run Code Online (Sandbox Code Playgroud)

在模拟对象我有:

StreamWriter createFile( string name )
{
  var ms = new MemoryStream();
  _files.Add( Path.Combine( _outFolder, name ), ms );
  return new StreamWriter( ms, Encoding.UTF8 ) );
}
Run Code Online (Sandbox Code Playgroud)

其中_files是一个字典,用于存储创建的文件以供以后检查.

但是,当消费者关闭StreamWriter时,它还会处理MeamoryStream ...... :-(

有关如何追求这个的任何想法?

.net file mocking

4
推荐指数
1
解决办法
1757
查看次数

标签 统计

.net ×2

c# ×1

dotnet-httpclient ×1

file ×1

idisposable ×1

mocking ×1

stream ×1