2016-11-14 9 views
-1

Я использую довольно стандартную реализацию HttpClient для отправки запроса POST. У меня есть объект, сериализованный в JSON, заданный объекту StringContent, затем POSTed с использованием HttpClient.PostAsJsonAsync.C# Почему HttpClient.PostAsJsonAsync отправляет запрос GET?

У меня есть как локальный сервер, так и общедоступный сервер. 2 приложения в локальной сети, 1 для общественности. На LAN-сервере размещен экземпляр Jenkins и промежуточное приложение, пытающееся отправить этот запрос POST. На общедоступном сервере размещается бот Bot Framework, который пытается собрать данные POST.

Jenkins публикует информацию промежуточному приложению относительно сборки с использованием плагина Notification. Это приложение запрашивает дополнительную информацию о сборке с использованием Jenkins JSON API. Я хватаю соответствующие данные Дженкинса, помещаю их в объект, сериализуем в JSON и пытаюсь отправить его в Бот.

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); 

    //.... 
} 

Бот отвечает 405 заявлением, что он не разрешает запросы GET. Что правильно, у Bot есть только метод POST. Но посредник должен отправлять POST.

Таким образом, вопрос ПОЧЕМУ будет ли промежуточное приложение отправлять запрос GET в Бот, когда API предназначен для отправки POST? Я выкопал в HttpClient, чтобы узнать, что происходит внутри PostAsJsonAsync, и я не вижу ничего там, что бы преобразовать запрос в GET, так что возможно ли я что-то упустил из настройки сервера?

+0

Здесь нет никаких вопросов. – toadflakz

+0

__PostAsJsonAsync отправляет запрос GET__ - что это на самом деле означает? –

+0

Вопрос в том, почему он отправляет GET, когда метод явно предназначен для отправки POST ... –

ответ

0

Ezequiel Jadib для решения проблемы. Ему удалось обойти проблему, с которой я столкнулся, а не отвечать на этот вопрос как таковой, но все же спас мне время от времени, пытаясь ее исправить.

Использование DirectLine теперь для связи с ботом из промежуточного приложения. Казалось, немного медленнее, когда сообщение передается боту, но я могу отправить JSON в виде сообщения и разобрать его в Бот из контроллера сообщений.