2016-11-14 15 views
-1

私は、HttpClientのかなり標準的な実装を使用してPOSTリクエストを送信しています。 JSONにシリアル化されたオブジェクトがあり、StringContentオブジェクトに与えられ、次にHttpClient.PostAsJsonAsyncを使用してPOSTされます。C#なぜHttpClient.PostAsJsonAsyncがGETリクエストを送信していますか?

私はLANサーバーとパブリックサーバーの両方を持っています。 LAN上で2つのアプリケーション、一般には1つ。 LANサーバーはJenkinsインスタンスと、このPOST要求を送信しようとしている仲介アプリケーションをホストします。パブリックサーバは、POSTデータを収集しようとしているボットフレームワークボットをホストしています。

Jenkinsは、Notificationプラグインを使用してビルドに関する情報を仲介アプリケーションに通知します。このアプリケーションは、Jenkins JSON APIを使用してビルドに関する追加情報を要求します。関連するJenkinsのデータを取得してオブジェクトに入れ、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); 

    //.... 
} 

ボットは405でGET要求を許可しないと応答します。これは正しいですが、BotはPOSTメソッドしか持っていません。しかし、仲介者はPOSTを送信する必要があります。

したがって、質問がWHYの場合、APIがPOSTを送信するように意図されている場合、仲介アプリケーションはGET要求をBotに送信しますか?私はHttpClientを掘り下げてPostAsJsonAsyncの内部で何が起こるのか見てきました。そこにはリクエストをGETに変換するものは何も表示されません。サーバーの設定から何か不足する可能性がありますか?

+0

ここに質問はありません。 – toadflakz

+0

__PostAsJsonAsync GET要求を送信する_実際にはどういう意味ですか? –

+0

質問は、メソッドが明らかにPOSTを送信することを意味しているときにGETを送信する理由です... –

答えて

0

問題の解決方法はEzequiel Jadibです。実際に問題に答えるのではなく、私が持っていた問題を回避することができましたが、まだそれを修復しようと数時間苦労してしまっていました。

DirectLineを使用して、仲介アプリケーションからボットと通信できます。ボットの向こう側にメッセージが届くのが少し遅いようですが、JSONをメッセージとして送信し、メッセージコントローラからBotで解析できます。

関連する問題