我有一个方法可以向服务器发送POST
个请求。
请求在HttpRequestMessage
对象中定义。
然而,如果服务器返回一些可重试的错误,我想重试,如下面的代码所示:
using (var request = new HttpRequestMessage(HttpMethod.Post, _endpoint))
{
var requestPayload = Serialize(ingestionRequest);
request.Content = new StringContent(requestPayload, Encoding.UTF8, JsonContentType);
await _retryPolicy.ExecuteAsync(async () =>
{
// ReSharper disable once AccessToDisposedClosure
using (var response = await _httpClient.SendAsync(request))
{
if (!response.IsSuccessStatusCode)
{
throw new IngestionException(response.StatusCode, response.ReasonPhrase);
}
}
});
}
事实证明HttpRequestMessage
不能多次发送,抛出以下异常:
请求消息已发送。无法多次发送相同的请求消息。
我怎么能做上面代码尝试做的事情 - 同时保持代码简单优雅?
答案 0 :(得分:1)
尝试使用like this answer内容复制/克隆请求消息。然后在下次重试时使用克隆的请求。像
这样的东西if (!response.IsSuccessStatusCode)
{
var oldRequest = request;
request = request.Clone();
oldRequest.Dispose();
throw new IngestionException(response.StatusCode, response.ReasonPhrase);
}