2016-08-25 47 views
1

我想看看我的HTTP請求包含的請求正文用於調試目的。這裏是我現在有的:使用HttpClient如何查看請求內容正文?

var httpResponseMessage = await _httpClient.PostAsync(uri, objectToInsert, jsonFormatter); 

//This throws an exception 
var thisDoesntWork = await httpResponseMessage.RequestMessage.Content.ReadAsStringAsync(); 

這會拋出一個ObjectDisposedException。我如何查看請求主體以確保發送的JSON是正確的?

+5

使用[fiddler](http://www.telerik.com/fiddler)...? – rene

+0

@rene - 我知道我可以使用Fiddler或Wireshark或許多其他工具,但這不是一次好奇的問題。我可能希望記錄請求正文以進行審計,因此我需要以編程方式確定請求正文。 –

+0

@JustinHelgerson然後使用[FiddlerCore](http://www.telerik.com/fiddler/fiddlercore):) –

回答

1

簡短的回答是你以後不能請求已發送。爲了方便開發人員,HttpClient在請求發出後處理內容主體。有關詳細信息,請參閱Why do HttpClient.PostAsync and PutAsync dispose the content?

作爲一種替代方法,您可以繼承現有的HttpContent實現,重寫Dispose方法並在處置之前記錄內容的主體。

或者,如建議的那樣,使用外部工具來監視飛行中的請求。

-2

ObjectDisposedException因爲您在Content.ReadAsStringAsync()完成前部署HttpRequestMessage和HttpClient而引發。

請注意,Content.ReadAsStringAsync()是一種異步方法。在處理HttpClient之前,您需要等待它完成。

如果你不想使用異步可以添加。結果迫使代碼同步執行:

var response = httpClient.PostAsync(BaseUri, new FormUrlEncodedContent(parameters)).Result; 

var contents = response.Content.ReadAsStringAsync().Result; 
+0

我很久沒有處理'HttpClient'了。顯然'PostAsync'會以某種方式自動處理'HttpRequestMessage',這就是爲什麼我問這個問題的原因。另外,如果你看我的問題,我已經在等待'ReadAsStringAsync'方法。 –

+0

試試這個,讓我知道是什麼迴應: httpResponseMessage.EnsureSuccessStatusCode(); 如果HTTP響應的IsSuccessStatusCode屬性爲false,則會引發異常。 –

+0

你可以做的其他事情是發送json作爲字符串來測試。 .... PostAsync(uri,new StringContent(data)); –

相關問題