Fiddler 没有看到来自 C# HttpClient() 的 API 调用
Posted
技术标签:
【中文标题】Fiddler 没有看到来自 C# HttpClient() 的 API 调用【英文标题】:Fiddler not seeing API calls from C# HttpClient() 【发布时间】:2017-08-14 22:34:51 【问题描述】:我有一个调用 Web API Web 服务的 ASP.NET MVC 网站。
调用正常并返回 200 OK - 在我的本地计算机和 Web 服务器上调用 Web 服务。
我有 Fiddler 正在运行,但它没有看到这些调用 - 仅调用 MVC 网站(进而调用 Web 服务)。
如何查看实际的 Web 服务调用?
这应该可以正常工作吗?尤其是基于 Web 的 Web 服务。
我已停止引用 http://localhost
并改用 MACHINENAME - 正如一些 SO 帖子中所建议的那样。但这无济于事。
我使用HttpClient来调用它:
using (var client = new HttpClient())
var byteArray = Encoding.ASCII.GetBytes(username + ":" + password);
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
client.BaseAddress = new Uri("http://MACHINENAME");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.PutAsJsonAsync("api/path", custImp);
如何在 Fiddler 中查看 Web 服务调用?
【问题讨论】:
浏览器、MVC 网站和 WebAPI 是否都位于同一台计算机上? 是的 - 我还在针对在线的网络服务进行测试。 【参考方案1】:当您启动 Fiddler 时,它会更改当前 Windows 用户的默认系统代理,以便该用户发出的 Web 请求被 Fiddler 捕获。
但是,该网站在 IIS 中运行并在不同的用户下运行。您必须通过在 MVC 应用程序的 web.config 文件中明确指定 Fiddler 作为 Web 代理来使您的网站使用 Fiddler,如下所示(使用您的 Fiddler 使用的端口):
<configuration>
...
<system.net>
<defaultProxy>
<proxy proxyaddress="http://127.0.0.1:8888" />
</defaultProxy>
</system.net>
...
</configuration>
参考资料:
Debugging Http or Web Services Calls from ASP.NET with Fiddler Capturing Traffic from .NET Services with Fiddler正如BornToCode 所提到的,也可以将应用程序池身份更改为您当前的用户。
【讨论】:
好的,您是否建议也按照此处的建议更改机器配置(这是我可以让它工作的唯一方法):telerik.com/blogs/… 通常,您只需更改 machine.config 即可从 Windows 服务中运行的代码调试 Web 访问。对于 IIS 中的 Web 应用程序,操作文件 web.config 就足够了。我已经测试并确认我的答案中显示的代码适用于 IIS。请再试一次,并确保您使用的代码与所示完全相同。 我只能在修改机器配置时让您的代码正常工作。您确定 fiddler 看到的是 MVC 应用程序对 Web API 服务进行的 API 调用,而不仅仅是您的浏览器对 MVC 测试应用程序进行的调用吗? 是的,我确定。 如果您不想弄乱 web.config,您可以将应用程序池标识更改为当前用户,它也可以工作。感谢您的出色回答,因为我从未意识到 fiddler 仅适用于当前 Windows 用户。【参考方案2】:确保您以管理员身份运行 Fiddler。
【讨论】:
【参考方案3】:我添加 .fiddler 以便捕获请求,例如:
http://localhost.fiddler:59846
参考:https://docs.telerik.com/fiddler-everywhere/knowledge-base/capturing-localhost-traffic
【讨论】:
以上是关于Fiddler 没有看到来自 C# HttpClient() 的 API 调用的主要内容,如果未能解决你的问题,请参考以下文章
Fiddler 没有从 ASP.NET 网站嗅探 SOAP 流量