c# - 请求消息已发送。不能多次发送同一个请求报文

标签 c# .net async-await dotnet-httpclient func

我这里的代码有什么问题吗?我不断收到此错误:

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

我的 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());
}

关于c# - 请求消息已发送。不能多次发送同一个请求报文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25047311/

相关文章:

c# - 如何计算旋转图像的正确位置偏移?

c# - 为什么 Windows Phone 7 不完全支持 C# 规范?

c# - 使用 like 执行查询不起作用

c# - 通过C#登录一个网站,导航到另一个网页,然后将源代码输出为字符串

c# - WPF加载帧异步

c# - 创建异步包装器的方法

c# - html agility pack url scraping——获取完整的html链接

c# - 如何使用 "Linq to Objects"将一组连续的日期放在一个组中?

javascript - 如何使用支持 IE11 的 babel 启用 async/await

c# - SignalR Hub 中的自定义原则