تم إرسال رسالة الطلب بالفعل.لا يمكن إرسال نفس رسالة الطلب عدة مرات
-
21-12-2019 - |
سؤال
هل هناك أي خطأ في الكود الخاص بي هنا؟وأظل الحصول على هذا الخطأ:
System.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());
}
لا تنتمي إلى StackOverflow