我想查看我的HTTP请求的请求主体是否包含在调试目的中。这就是我现在所拥有的:
var httpResponseMessage = await _httpClient.PostAsync(uri, objectToInsert, jsonFormatter);
//This throws an exception
var thisDoesntWork = await httpResponseMessage.RequestMessage.Content.ReadAsStringAsync();
这会引发ObjectDisposedException
。如何查看请求正文以确保发送的JSON是否正确?
答案 0 :(得分:2)
简短的回答是您已经发送请求后不能。 HttpClient在发出请求后处理内容主体,以方便开发人员。有关详细信息,请参阅Why do HttpClient.PostAsync and PutAsync dispose the content?。
作为替代方案,您可以从现有的HttpContent实现继承,覆盖Dispose方法,并在处理之前记录内容的主体。
或者,如建议的那样,使用外部工具来监控飞行中的请求。
答案 1 :(得分:0)
您需要首先创建一个 HttpRequestMessage 以传递给 HttpClient。然后您就可以评估/记录内容。
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, uri);
request.Content=JsonSerializer.Serialize(objectToInsert);
Console.WriteLine(request.Content.ReadAsStringAsync().Result);
HttpResponseMessage response = await httpClient.SendAsync(request);
答案 2 :(得分:-2)
抛出ObjectDisposedException,因为您在Content.ReadAsStringAsync()完成之前处理了HttpRequestMessage和HttpClient。
请注意,Content.ReadAsStringAsync()是一种异步方法。在处理HttpClient之前,您需要等待它完成。
如果您不想使用异步,可以添加.Result以强制代码同步执行:
var response = httpClient.PostAsync(BaseUri, new FormUrlEncodedContent(parameters)).Result;
var contents = response.Content.ReadAsStringAsync().Result;