请求消息已经发送.不能多次发送相同的请求消息

本文关键字:请求 消息 不能 | 更新日期: 2023-09-27 18:15:47

我的代码有什么问题吗?我一直得到这个错误:

系统。InvalidOperationException:请求消息已经被发送。不能多次发送相同的请求消息。

我的HttpRequestMessage是在一个Func内,所以我想我得到一个全新的请求,每次我在Func()传递。

public async Task<HttpResponseMessage> GetAsync(HttpRequestMessage request)
{
     return await RequestAsync(() => request);
}
public async Task<HttpResponseMessage> RequestAsync(Func<HttpRequestMessage> func)
{
   var response = await ProcessRequestAsync(func);
    if (response.StatusCode == HttpStatusCode.Unauthorized)   
    {
        WaitForSomeTime();
        response = await ProcessRequestAsync(func);        
    }
    return response;
}
private async Task<HttpResponseMessage> ProcessRequestAsync(Func<HttpRequestMessage> func)
{
    var client = new HttpClient();
    var response = await client.SendAsync(func()).ConfigureAwait(false);
    return response;
}

请求消息已经发送.不能多次发送相同的请求消息

两次调用同一个func参数:

var response = await ProcessRequestAsync(func);
//...
response = await ProcessRequestAsync(func);

在本例中,func每次都返回相同的请求。它不会每次调用都生成一个新的。如果你真的需要每次不同的请求,那么func需要每次调用返回一个新消息:

var response = await GetAsync(() => new HttpRequestMessage()); // Create a real request.
public async Task<HttpResponseMessage> GetAsync(Func<HttpRequestMessage> requestGenerator)
{
     return await RequestAsync(() => requestGenerator());
}

我有同样的问题,但在我的代码中没有重复。原来我在一个异步进程上添加了一个手表。当我逐步执行代码时,手表调用了进程,因此当我到达我试图调试的那一行时,它崩溃了,并显示了这个错误消息。去掉所有的手表解决了这个问题。把这个留给其他可能有同样问题的人。