gpt4 book ai didi

c# - 如何正确重试 HttpRequestMessage?

转载 作者:可可西里 更新时间:2023-11-01 16:36:26 25 4
gpt4 key购买 nike

我有一个向服务器发送 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 不能发送多次,抛出以下异常:

The request message was already sent. Cannot send the same request message multiple times.

我怎样才能做到上面代码试图做的事情 - 同时保持代码简单和优雅?

最佳答案

尝试使用某种方式复制/克隆请求消息 like this answer .然后在下次重试时使用克隆的请求。有点像

if (!response.IsSuccessStatusCode)
{
var oldRequest = request;
request = request.Clone();
oldRequest.Dispose();
throw new IngestionException(response.StatusCode, response.ReasonPhrase);
}

关于c# - 如何正确重试 HttpRequestMessage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42460195/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com