C#为什么HttpClient.PostAsJsonAsync发送GET请求?

时间:2016-11-14 12:11:09

标签: .net http-post http-get botframework http-status-code-405

我使用HttpClient的非常标准的实现来发送POST请求。我有一个对象,序列化为JSON,给予StringContent对象,然后使用HttpClient.PostAsJsonAsync进行POST。

我有LAN服务器和公共服务器。局域网上的2个应用程序,1个公共应用程序。 LAN服务器托管Jenkins实例和尝试发送此POST请求的中间应用程序。公共服务器托管一个Bot Framework bot,它试图收集POST数据。

Jenkins使用Notification插件向中介应用程序发布有关构建的信息。此应用程序使用Jenkins JSON API请求有关构建的额外信息。我获取相关的Jenkins数据,将其放入一个对象,Serialize to JSON并尝试将其发送到Bot。

var botMessage = new JenkinsBotMessage(notification, svnData);
using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("{BOT URL}");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept
        .Add(new MediaTypeWithQualityHeaderValue("application/json"));

    HttpResponseMessage response =
        await client.PostAsJsonAsync("api/jenkins", botMessage);

    //....
}

Bot以405回应说它不允许GET请求。哪个是正确的,Bot只有一个POST方法。但中间人应该发送一个POST。

因此问题是为什么当API打算发送POST时,中间应用程序是否会向Bot发送GET请求?我已经挖掘了HttpClient以查看PostAsJsonAsync内部发生了什么,我无法在那里看到任何可以将请求转换为GET的内容,因此我可能会丢失来自服务器集的内容 - 最多?

1 个答案:

答案 0 :(得分:0)

感谢Ezequiel Jadib解决问题的方法。它设法解决了我遇到的问题,而不是实际回答这个问题,但仍然在试图修复它的过程中挽救了我的时间。

现在使用DirectLine与中间应用程序中的bot进行通信。将消息传递给机器人似乎有点慢,但我可以将JSON作为消息发送,并从消息控制器中解析它在Bot中。