تم إرسال رسالة الطلب بالفعل.لا يمكن إرسال نفس رسالة الطلب عدة مرات

StackOverflow https://stackoverflow.com//questions/25047311

سؤال

هل هناك أي خطأ في الكود الخاص بي هنا؟وأظل الحصول على هذا الخطأ:

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());
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top