Zur Dokumentation springen
C#

Fehler und Wiederholungen

Ein Ausnahmetyp für jede Ablehnung, eine Eigenschaft für jede Art und Wiederholungen, die nicht doppelt senden können.

Einen Fehler behandeln

errors.cs
try{    await client.Emails.SendAsync(new Body    {        ["from"] = "[email protected]",        ["to"] = "[email protected]",        ["subject"] = "Your September invoice",        ["text"] = "Invoice attached.",    });}catch (OpenEmailApiException error) when (error.IsValidation){    Console.Error.WriteLine($"{error.Code} {error.Param} {error.Message}");}catch (OpenEmailApiException error) when (error.IsRateLimited){    Console.Error.WriteLine($"try again in {error.RetryAfterSeconds} seconds");}catch (OpenEmailNetworkException error) when (error.IsTimeout){    Console.Error.WriteLine("no answer in time");}

Eine Ablehnung der API löst OpenEmailApiException aus, und gar keine Antwort löst OpenEmailNetworkException aus. Beide leiten von OpenEmailException ab, sodass ein catch beide fängt und ein when-Filter die Art auswählt.

EigenschaftWas sie enthält
StatusDer HTTP-Status.
ErrorType, CodeDer Fehlertyp und der Code der API, etwa validation_error und invalid_parameter.
ParamDas Feld, das schuld ist, wenn es eines gibt.
RequestIdDie ID, die Sie nennen, wenn Sie dem Support schreiben.
DocUrlDie Seite der Dokumentation, die den Code erklärt.
RetryAfterSecondsWie lange Sie laut API warten sollen, in Sekunden.
FieldsDie Felder, die ein Anmeldeformular abgelehnt hat, jeweils mit key und error.
BodyDer dekodierte Antwortkörper.

Die Arten von Fehlschlägen

EigenschaftWann sie wahr ist
IsAuthDer Schlüssel oder das Token wurde abgelehnt, mit einem 401.
IsPermissionDie Zugangsdaten dürfen das nicht, mit einem 403.
IsScopeMissingDen Zugangsdaten fehlt der Scope, den der Aufruf braucht.
IsStepUpRequiredEin Zugriffstoken muss zuerst einen Code bestätigen.
IsNotFoundNichts hat diese ID, mit einem 404.
IsConflictDie Änderung widerspricht dem aktuellen Zustand, mit einem 409.
IsValidationEin Feld wurde abgelehnt, mit einem 422.
IsRateLimitedZu viele Anfragen oder ein Kontingent ist aufgebraucht, mit einem 429.
IsInvalidRequestJede andere Ablehnung der Anfrage.
IsServerErrorDie API ist fehlgeschlagen, mit einem Status von 500 oder höher.
IsRetryableDer Status gehört zu denen, die der Client erneut versucht.
IsTimeoutVor Ablauf des Zeitlimits kam keine Antwort. Diese Eigenschaft liegt auf OpenEmailNetworkException.

Ein Fehler im Aufruf selbst, etwa ein fehlerhafter Schlüssel oder eine leere ID, löst ArgumentException aus, bevor irgendetwas gesendet wird. Ein abgebrochenes Token löst OperationCanceledException aus, und eine Webhook-Zustellung, die ihre Prüfung nicht besteht, löst OpenEmailWebhookException aus.

Ein Bestätigungscode

Ein Zugriffstoken handelt für eine Person. Vor einer heiklen Änderung, etwa dem Löschen einer Domain, wird es deshalb nach demselben Bestätigungscode gefragt, den auch die Web-App verlangt. Fordern Sie einen Code an, prüfen Sie ihn und stellen Sie die Anfrage dann erneut. API-Schlüssel werden nie danach gefragt.

step-up.cs
var domainId = "b3e1f0a4-6c2d-4e8a-9f17-2d5c8a0b4e6f"; try{    await client.Domains.DeleteAsync(domainId);}catch (OpenEmailApiException error) when (error.IsStepUpRequired){    var challenge = await client.Security.BeginStepUpAsync();     Console.WriteLine($"Enter the code sent by {challenge["method"]}");     await client.Security.VerifyStepUpAsync(new Body { ["code"] = Console.ReadLine()?.Trim() });    await client.Domains.DeleteAsync(domainId);}

Was erneut versucht wird

  • Lesezugriffe, Sendungen und jeder Schreibzugriff, der gefahrlos wiederholt werden kann, werden bis zu MaxRetries Mal erneut versucht. Jeder andere Schreibzugriff wird einmal gesendet.
  • Die Status 408, 500, 502, 503 und 504 werden mit einer Wartezeit wiederholt, die bei einer halben Sekunde beginnt und sich bis auf acht Sekunden verdoppelt.
  • Ein 429 wird nur wiederholt, wenn er ein Retry-After von höchstens einer Minute trägt, und der Client wartet so lange.
  • Eine Verbindung, die scheitert oder das Zeitlimit überschreitet, wird genauso wiederholt.

Ein wiederholter Versand trägt jedes Mal denselben Idempotenzschlüssel, sodass die API die erste Nachricht erneut ausgibt, statt eine zweite zu senden.