首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找覆盖HttpWebResponse的GetResponseStream方法的方法

寻找覆盖HttpWebResponse的GetResponseStream方法的方法
EN

Stack Overflow用户
提问于 2013-09-25 05:24:10
回答 3查看 568关注 0票数 0

本质上,我的目标是修改流。不确定这是否可能?有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2013-09-25 05:28:13

我正在寻找一种方法来覆盖HttpWebResponse类的GetResponseStream方法,以便有一个自定义的流返回。

凉爽的。当然,您必须以这样一种方式设计代码,这样您就不会使用HttpWebResponse类的具体实现,这种情况很少发生。这就是紧耦合。我的意思是,不要再用HttpWebRequests来思考了。这就是无论如何都会拯救你的东西,这也会削弱你的代码不同层之间的耦合性,并使它成为单元可测试的。

这个答案的要点是,您的代码应该以这样的方式设计,以便它不依赖于任何HttpWebRequest具体类。您应该开始考虑如何将其隐藏在可以在单元测试中轻松模拟的接口抽象之后。

一旦您在接口后面抽象了您的web服务调用,您就可以很容易地在单元测试中模拟此调用,以测试系统的实际行为,而不需要依赖于测试中的特定类。

票数 1
EN

Stack Overflow用户

发布于 2013-09-25 05:31:45

你不能轻易地重写HttpWebResponse的行为,要么你把web服务API包装在客户端,就像@Jon在评论中建议的那样,或者,如果你真的想变得更有冒险精神,那就改变请求,把它指向一个代理服务器,它会根据需要修改流。

不过,这不会是一件微不足道的事情。

票数 0
EN

Stack Overflow用户

发布于 2013-09-25 05:35:50

假设您可以修改调用GetResponseStream的代码,那么适配器模式可能是一个不错的选择。

流:流{ MyCustomStream originalStream;

代码语言:javascript
复制
  MyCustomStream(Stream originalStream) 
  { this.originalStream = originalStream; }

  override int Read(byte [] buffer, int offset, int count) 
  {
      byte [] temp = new byte[count];
      var ret = originalStream.Read(temp, offset, count);
      // modify your buffer if desired
      Array.Copy(buffer, temp);
      return ret;
  }

  // implement all the other abstract methods of Stream and just call originalStream 

}

//现在像这样替换代码....

Request.GetResponseStream myStream = var ();

//使用....

var myStream =新的MyCustomStream(request.GetResponseStream());

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18992332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档