2016-10-18 3 views
0

当社のウェブサイトから変更が加えられた場合にアクションを記録するサービスにJSONを掲載しています。 JSONを投稿した後、レスポンスメッセージからコンテンツを取得して記録します。私たちのレコードのPostAsJsonAsyncの後にHttpResponseMessage.Contentをキャプチャする方法はありますか?

のVisual Studioウォッチペインで

私はポストの後に次のようになり、コンテンツ、参照することができます、検索結果を

ID = 4、ステータス= RanToCompletion、メソッド= "{ヌル}" = " []」

上記の結果は、時計には、この文の後に表示されます:

httpResponseMessage.Content.ReadAsStringAsync()、AC

しかし、私が文字列に応答コンテンツを割り当てるときは、文字列の値は上記のように予想されるプロパティ(ID、Statusなど)のリストではなく、単に[]]です。

コードの簡単なセクションです(try/catchと他の部分は省略されています)。 PostAsJsonAsyncの後、200の成功ステータスコードが取得されます。

public HttpResponseMessage httpResponseMessage { get; set; } 
public string httpResponseMessageContent { get; set; } 

private async Task SendMaintenanceEvent(object maintenanceEvent) 
{ 
    string endpointAddress = "http://whereever"; 
    string targetDirectory = "OurTarget"; 
    string credentials = "Omitted"; 
    string credentialsBase64 = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(credentials)); 
    string maintenanceEventAsJSON = System.Web.Helpers.Json.Encode(maintenanceEvent); 
    StringContent stringContent = new StringContent(maintenanceEventAsJSON, Encoding.UTF8, "application/json"); 

    using (HttpClient httpClient = new HttpClient()) 
    { 
     httpClient.BaseAddress = new Uri(endpointAddress); 
     httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentialsBase64); 
     this.httpResponseMessage = await httpClient.PostAsJsonAsync(targetDirectory, stringContent).ConfigureAwait(false); 
     if (httpResponseMessage.IsSuccessStatusCode) 
     { 
      // Current value: "[]" 
      // Expected value: Id = 4, Status = RanToCompletion, Method = "{null}", Result = "[]" 
      this.httpResponseMessageContent = await httpResponseMessage.Content.ReadAsStringAsync(); 
     } 
     else 
     { 
      throw new System.Exception("Error sending maintenance event."); 
     } 
    } 
} 

ありがとうございました。

+0

応答メッセージの内容は、結果変数に見られるように "[]"です。 ID、ステータスなどが必要な場合は、Contentがそうであるように、すべてがhttpResponseMessageの直接の子です。 Webサービスからレスポンスを作成する場合は、含める任意の(オプションの)コンテンツに加えて、いくつかの追加機能を追加します。 httpResponseMessage全体を変数として取得し、ヘルパーメソッドを使用して、必要なプロパティを文字列に解析します。 –

+0

ありがとうエレメンタルピート。これらのプロパティはhttpResponseMessageには表示されませんでした。しかし、これは私が期待していたものを返します。顕著な違いは、私が待っていたことです:var content = httpResponseMessage.Content.ReadAsStringAsync();あなたが指摘したように、私はこれらを解析する必要があるように見えます。 –

答えて

0

Id = 4, Status = RanToCompletion, Method = "{null}", Result = "[]"は、POSTの結果ではなく、完了した非同期Taskのデバッグビューです。 POSTの実際の結果はちょうどTask.Resultプロパティです(またはawaitキーワードを使用して取得)。 POSTの結果は、実際には空のJSON配列[]です。クライアントコードはOKです。サーバーを確認してください。

+0

これに変更してデバッグしてください: 'var task = httpResponseMessage.Content.ReadAsStringAsync();文字列r =待ちタスク; ' – Honza

関連する問題