当我输入此 URI 以在我正在运行的 Web API 应用程序上调用 REST 方法时:
http://SHANNON2:21608/api/inventory/sendXML/duckbill/platypus/someFileName // using Hostname of local machine
——或者这个:
http://192.168.125.50:21608/api/inventory/sendXML/duckbill/platypus/someFileName // using IP Address of local machine
...在 Postman 中(使用 HttpPost,并附加一个 xml 文件)并运行它,在 Fiddler 2 中检查它时,我在 Fiddler 的 Inspectors.WebView 窗格中看到了这个错误:
Bad Request - Invalid Hostname
--------------------------------------------------------------------------------
HTTP Error 400. The request hostname is invalid.
注意:即使我确实在服务器上的相应控制器 REST 方法中命中了断点,我也会收到该错误。
试图进一步检查到底发生了什么(正在发送什么 HTTP),我运行 Wireshark 并只看到我的 IP 地址的目的地:
...并以我的 IP 地址作为来源:
为什么没有 HTTP 协议条目?HTTP 显然正在发送,因为我遇到了在服务器控制器方法的第一行设置的断点:
[HttpPost]
[Route("api/inventory/sendXML/{userId}/{pwd}/{filename}")]
public async Task SendInventoryXML(String userId, String pwd, String fileName)
{
Task task = Request.Content.ReadAsStreamAsync().ContinueWith(t =>
{
var stream = t.Result;
using (FileStream fileStream = File.Create(String.Format(@"C:\HDP\{0}.xml", fileName), (int)stream.Length))
{
byte[] bytesInStream = new byte[stream.Length];
stream.Read(bytesInStream, 0, (int)bytesInStream.Length);
fileStream.Write(bytesInStream, 0, bytesInStream.Length);
}
});
}
那么,为什么 Wireshark 如此隐秘地向我展示发送的 HTTP 呢?它是否对这种内部沟通视而不见,如果是这样,我如何“释放它”向我展示这一点?
更新
啊哈/瞧!Postman、RawCap ( http://www.netresec.com/?page=RawCap ) 和 Wireshark 的组合似乎有效。我立即从命令提示符下运行了新发现的 RawCap,并使用了这种措辞:
RawCap.exe 192.168.125.50 captured.pcap
...然后从 Postman 调用 REST 方法,并在 Wireshark 中打开 RawCap 创建的结果文件(在我的例子中为 captured.pcap),它向我显示了一些 HTTP 流量:
可以在此处查看有关 HTTP 调用的更多详细信息:
我不知道如何优雅地“关闭” RawCap。
更新 2
RawCap/Wireshark 告诉我这是一个错误的请求(我已经知道这是响应):
...但我没有看到任何线索让我知道为什么它被认为是一个错误的请求
更新 3
当我尝试使用各种形式的“本地”(主机名、IP 地址、“本地主机”)从 Fiddler Composer 调用我的 REST 方法时,我从未到达服务器中的断点;在此之前我收到错误消息(对于 locohost 是 404,对于所有其他人是 400):