2017-12-14 10 views
1

私はRESTエンドポイントを公開するAzureロジックアプリケーションを作成しました。PostAsJsonAsyncがボディパラメータを投稿していないようです

次のJSON本体は、postmanを使用して呼び出すと正常に動作します。

 var email = new Email 
     { 
      to = "[email protected]", 
      subject = "from webapp", 
      message = "hello world" 
     }; 
     var client = new HttpClient(); 
     var uri = "maskedout"; 
     var response = await client.PostAsJsonAsync<Email>(uri, email); 

I:

{ 
    "to": "[email protected]", 
    "subject": "Hello there", 
    "message": "Hello there!!!!!" 
} 

は、私はこのコードをC#PostAsJsonAsyncを使用して、同じ電話をかけるしようとすると、うまくしかし

{ 
    "headers": { 
     "Cache-Control": "no-cache", 
     "Connection": "keep-alive", 
     "Accept": "*/*", 
     "Accept-Encoding": "gzip,deflate", 
     "Host": "maskedout.northcentralus.logic.azure.com:443", 
     "User-Agent": "PostmanRuntime/6.4.1", 
     "Content-Length": "99", 
     "Content-Type": "application/json" 
    }, 
    "body": { 
     "to": "[email protected]", 
     "subject": "Hello there", 
     "message": "Hello there!!!!!" 
    } 
} 

形成され、着信要求を確認することができますよ私のRESTエンドポイントを正常に呼び出せますが、ボディは含まれていません

これは、私が参照するクエスト:

{ 
    "headers": { 
     "Connection": "Keep-Alive", 
     "Transfer-Encoding": "chunked", 
     "Host": "maskedout.northcentralus.logic.azure.com", 
     "x-ms-request-root-id": "9e5513c2-43961642a3688718", 
     "x-ms-request-id": "|9e5513c2-43961642a3688718.1.", 
     "Request-Id": "|9e5513c2-43961642a3688718.1.1.", 
     "Content-Type": "application/json; charset=utf-8", 
     "Content-Length": "0" 
    } 
} 

私はここで何が欠けていますか?郵便配達員と比較して私のC#コードの違いは何ですか?

+0

は、あなたはJSONが正しくシリアライズなっていることを確認するために使用されたJSONシリアライザと呼ばれていますか?郵便配達要求ではSSLを使用していて、コードでは使用していないようです。また、チャンクされたエンコーディングとは何ですか。 – Fran

+0

この質問に似ているようですかhttps://stackoverflow.com/questions/35464233/how-to-disable-chunked-transfer-encoding-in-asp-net-c-sharp-using-httpclient PostAsJsonAsync拡張メソッドですか? – Fran

+0

チャンクされたエンコードは何か分かりません。私のC#コードからわかるように、私はPostJsonAsAsyncを呼び出してオブジェクトを渡す以外はあまり効果がありません –

答えて

0

TransferEncodingChunkedヘッダープロパティは、デフォルトでfalseである必要があります。私はあまりにもこの問題に遭遇しました

 var email = new Email 
     { 
      to = "[email protected]", 
      subject = "from webapp", 
      message = "hello world" 
     }; 
     var client = new HttpClient(); 
     var uri = "maskedout"; 
     client.DefaultRequestHeaders.TransferEncodingChunked = false; 
     var response = await client.PostAsJsonAsync<Email>(uri, email); 
0

しかし、これを試してみてください。問題はContent-Lengthヘッダーのようです。郵便配達では、それはコンテンツの長さですが、HttpClientを使用すると長さは0なので、エンドポイントは空であると言われているので、本文を無視していると思います。

私はこれを回避するために自分自身の拡張機能を作成しました:

public static async Task<HttpResponseMessage> PostJsonAsync<T>(
     this HttpClient client, 
     string requestUri, 
     T value) 
    { 
     var data = JsonConvert.SerializeObject(value); 
     var content = new StringContent(data, 
             Encoding.UTF8, 
             MimeTypes.Json); 
     Debug.WriteLine(client.BaseAddress + requestUri); 
     return await client.PostAsync(requestUri, 
             content) 
          .WithRequestTimeout() 
          .ConfigureAwait(false); 
    } 
関連する問題