我正在使用HttpClient向我无法访问的其中一个web api服务发送请求,我需要跟踪从我的客户端到服务器的实际请求流。 有没有办法可以连接小提琴手听取请求?
我正在使用System.Net.Http.HttpClient类发送请求。
更新:现在试图改善这个问题,因为我无法得到我想要的东西。 我正在使用.Net客户端应用程序连接到我自己的IIS上通过HTTP通道托管的Web服务。我之前使用在我的IIS上托管的网站进行了小提琴调试,并观察了我的浏览器和WebSite之间产生的流量。但是,当看到.Net客户端程序使用HttpClient类与Web服务进行通信时产生的流量时,奇怪的是,小提琴手似乎无法利用该流量并且不会显示任何内容。 .Net HttpClient是否绕过WinInet API连接到服务,导致小提琴手无法观看流量?
答案 0 :(得分:39)
如果您使用http://localhost:1234之类的网址进行连接,请将其更改为http://localhost.fiddler:1234/,然后来自HttpClient的请求应在Fiddler中显示。
答案 1 :(得分:20)
一般来说,只需在申请之前启动Fiddler即可。你还没有解释你到目前为止所做的尝试。
答案 2 :(得分:11)
IIS不使用Internet选项中的代理设置,因为它在不同的用户标识下运行(默认为ApplicationPoolIdentity
)。 @EricLaw提供了一个good pointer关于捕获IIS / ASP.NET流量的问题。
我不是将IIS配置为使用我的登录帐户,而是编辑web.config
以强制HTTPClient使用代理,如下所示。
<configuration>
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy proxyaddress="http://127.0.0.1:8888"/>
</defaultProxy>
</system.net>
</configuration>
答案 3 :(得分:4)
如果.NET应用程序在您当前的用户帐户中运行,请在配置部分中添加以下内容:
<configuration>
<system.net>
<defaultProxy>
<proxy bypassonlocal="false" usesystemdefault="true" />
</defaultProxy>
</system.net>
</configuration>
注意:重要说明:无论其他设置如何,.NET始终会绕过包含localhost的URL的Fiddler代理。因此,不要使用localhost,而是更改代码以引用计算机名称。例如:
此网址不会出现在Fiddler中:
http://localhost/X509SignCodeService/X509SigningService.asmx
此网址将显示在Fiddler中:
http://mymachine/X509SignCodeService/X509SigningService.asmx
答案 4 :(得分:1)
使用HttpTracer - a library we built specifically for this purpose。您无需配置代理,这就像将处理程序的实例传递到HttpClient中一样简单:new HttpClient(new HttpTracerHandler())
。尝试一下,对于Xamarin方面和ASP.NET中的S2S而言,这都是无价的。
答案 5 :(得分:0)
对于那些在 .NET Core 应用程序中遇到相同问题并使用 Fiddler 的人(应该也适用于其他工具,但尚未检查)。
然后运行(在 Windows 上以管理员身份):
netsh winhttp set proxy 127.0.0.1:<the port>
要删除代理,请运行:
netsh winhttp reset proxy
你能找到的智慧之源here。 与本地主机一起使用。
答案 6 :(得分:-1)
所有对IIS的请求都记录在日志目录中(iis manager&gt; iis server&gt; logging) 默认是: %系统驱动%\的Inetpub \日志\ LogFiles文件
在行尾有状态请求。