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 调用的主要内容,如果未能解决你的问题,请参考以下文章

来自 C# 客户端的多部分表单

Fiddler 没有从 ASP.NET 网站嗅探 SOAP 流量

C# 使用 Web API 使用 Java Web 服务(没有可用的 WSDL)

C# SOAP Webservice 方法返回 null

Fiddler抓包分析

C#做的窗体程序怎么使用fiddler抓包