【发布时间】:2016-07-16 14:18:14
【问题描述】:
我知道有很多关于此的问题/答案、博客,而不是关于 Telerik 的常见问题解答。我仍然无法以清晰纯粹的方式诊断和解决这个问题:
上下文:
我有一个 Web API 应用程序,我有一个(单元测试)客户端,它使用 HttpClient 向 API 发送请求。 Web API 应用程序在 http://localhost:8631/ 中侦听 有时我使用 Fiddler 来查看发生了什么。
问题:
我的 HttpClient 和 Web API 之间的流量没有被 Fiddler 捕获。启动 Fiddler 后流量仍然可以,但 Fiddler 中没有显示。
目前的诊断:
- 重要提示:使用任何浏览器并向http://localhost:8631/发送请求正在工作,我的意思是:Fiddler 捕获的流量
- 明确配置 HttpClient 以使用 Fiddler 作为代理没有帮助。
- 将 HttpClient url 从 http://localhost:8631/ 更改为 http://localhost.fiddler:8631/帮助,无论是否配置了代理。
结论: 至少我的情况是:这与 HttpClient 是否被明确配置为使用 Fiddler 作为代理无关。这是关于 HttpClient 和/或 Fiddler 的 localhost 行为。
再次发出:
有人可能会问:问题解决了,那么问题是什么?嗯……
Q1:这仍然是一个痛苦的问题,因为 url 在某处被编码或配置(我的意思是http://localhost:8631/ 或 http://localhost.fiddler:8631 所以每次启动和停止提琴手都必须更新。更多:签入源代码到源代码控制,并由队友在另一台机器上签出可能会导致问题。所以:是否有任何不那么痛苦的解决方法这个?
在团队中工作和使用源代码控制时,硬编码我的机器名称(这也可以工作)会导致同样的痛苦和问题
Q2:为什么会出现这种不一致的行为:Pure http://localhost:8631/ 适用于任何浏览器,但不适用于 HttpClient。
我认为回答 Q2 可以让我们更接近更有用的解决方法。
代码展示
// Using the following url w o r k s regardless of any proxy setting
// ...but it is a pain to hardcode or configure this and change depending on Fiddler is running or not
//private const string ApiUrl = "http://localhost.fiddler:8631/";
// This is not working regardless any proxy setting. Trafic bypasses Fiddler
private const string ApiUrl = "http://localhost:8631/";
protected HttpClient GetClient()
{
var httpClientHandler = new HttpClientHandler
{
// Does not work
//Proxy = new WebProxy("http://localhost:8888", false),
// Does not work
Proxy = WebRequest.DefaultWebProxy,
UseProxy = true
};
var client = new HttpClient(httpClientHandler)
{
BaseAddress = new Uri(ApiUrl)
};
// ...
【问题讨论】:
-
您不需要通过 HttpClient 使用 Fiddler。 Fiddler 设置/重置默认操作系统代理,因此您不需要修改任何应用程序来使用它。只有当您...摆弄代理设置或在 Fiddler 有机会重置操作系统代理之前终止 Fiddler(例如通过关闭),您才会遇到问题
-
为了获得特定问题的帮助,您需要发布实际代码,包括对 app.config 中 system.net 代理设置的任何修改
-
您是否尝试过适用于 .NET 的提琴手文档? docs.telerik.com/fiddler/Configure-Fiddler/Tasks/…
-
@PhilCooper:这就是我试图不做的事情,因为这很痛苦:“硬编码(在代码或配置中)一个明确的代理设置(对提琴手或我的机器名称)。”这是痛苦的 a) 源代码控制/团队考虑,b) 因为您必须在启动 fiddler 或停止 fiddler 时始终切换。
标签: c# fiddler dotnet-httpclient