当我输入此 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.
注意:即使我得到了这个错误do在服务器上相应的控制器 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?它是否对内部沟通视而不见?如果是,我该如何“释放它”来向我展示这一点?
UPDATE
啊哈/瞧! Postman、RawCap 的组合(http://www.netresec.com/?page=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。
UPDATE 2
RawCap/Wireshark 告诉我这是一个错误的请求(我已经知道这是响应):
...但我没有看到任何线索why这被认为是一个糟糕的请求
UPDATE 3
当我尝试使用各种形式的“本地”(主机名、IP 地址、“locohost”)从 Fiddler Composer 调用 REST 方法时,我从未到达服务器中的断点;在此之前我收到错误消息(locohost 为 404,所有其他为 400):