Ich mache Aufrufe an eine externe API und möchte mit dem Ereignis umgehen, dass ein Anruf eine HttpResponseMessage
zurückgibt. In diesem Fall möchte ich das Zugriffstoken aktualisieren und den Anruf erneut durchführen.Verwenden von Polly, um nach HttpStatusCode.Unauthorized erneut zu versuchen
Ich versuche Polly
mit dem folgenden Code zu verwenden:
public async Task<HttpResponseMessage> MakeGetRequestAsync()
{
var retryPolicy = Policy
.HandleResult<HttpResponseMessage>(r => r.StatusCode == HttpStatusCode.Unauthorized)
.Retry(1, (exception, retryCount) =>
{
RefreshAccessToken();
});
var result = await retryPolicy.ExecuteAsync(() => CallApiAsync());
return result;
}
private async Task<HttpResponseMessage> CallApiAsync()
{
var url = Options.ResourceSandboxUrl;
var httpClient = new HttpClient();
SetRequestHeaders(httpClient);
var response = await httpClient.GetAsync(url);
response.StatusCode = HttpStatusCode.Unauthorized;
return response;
}
Ich habe Haltepunkte auf der
ExecuteAsync
Anweisung und inDoSomethingAsync
- wenn ich überExecuteAsync
SchrittDoSomethingAsync
nicht aufgerufen wird und die Steuerung wird zurück die Funktion, dieMakeGetRequestAsync
ich verstehe nicht, warum DoSomethingAsync
genannt wird nicht genannt - kann mir jemand helfen mit was ich versuche zu erreichen?
Ich habe & Polly Fragen auf Stack-Überlauf an der Polly Dokumentation aussehen, aber ich kann nicht herausfinden, was los ist ..
Vielen Dank !!! –
Ich verwende das gleiche Wiederholungsmuster und bekomme die Ausnahme als "Bitte verwenden Sie asynchrone Richtlinien beim Aufruf von asynchronen ExecuteAsync (und ähnlichen) Methoden.". Ich habe mir den Kopf gebrochen, um zu verstehen, was schief gelaufen ist ... und du hast mich gerettet. Vielen Dank..!! – Thangadurai