1

当我输入此 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):

在此处输入图像描述

4

1 回答 1

2

通常,Invalid Hostname意味着 HTTP 请求的Host标头包含未绑定到 Web 服务器上的任何站点的值。例如,您使用 IP 地址作为主机,但如果您的服务器仅配置为接受机器名(例如mybox),那么您将看到来自服务器的 HTTP/400 要求您提供正确的主机名。

于 2014-09-10T20:15:02.363 回答