Kalo te dokumentacioni
C#

Gabimet dhe riprovimet

Një tip i vetëm përjashtimi për çdo refuzim, një veti për çdo lloj dhe riprovime që nuk mund të dërgojnë dy herë.

Trajtimi i një gabimi

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");}

Një refuzim nga API-ja hedh OpenEmailApiException, dhe mungesa e plotë e përgjigjes hedh OpenEmailNetworkException. Të dyja rrjedhin nga OpenEmailException, kështu që një catch i vetëm e kap cilëndo, dhe një filtër when zgjedh llojin.

VetiaÇfarë mban
StatusStatusi HTTP.
ErrorType, CodeTipi i gabimit dhe kodi i API-së, si validation_error dhe invalid_parameter.
ParamFusha që e ka fajin, kur ka një të tillë.
RequestIdId-ja që duhet të citoni kur i shkruani mbështetjes.
DocUrlFaqja e dokumentimit që shpjegon kodin.
RetryAfterSecondsSa ju kërkoi API-ja të prisni, në sekonda.
FieldsFushat që refuzoi një formular regjistrimi, secila me një key dhe një error.
BodyTrupi i dekoduar i përgjigjes.

Llojet e dështimit

VetiaKur është e vërtetë
IsAuthÇelësi ose tokeni u refuzua, me një 401.
IsPermissionKredenciali nuk lejohet ta bëjë këtë, me një 403.
IsScopeMissingKredencialit i mungon scope-i që i duhet thirrjes.
IsStepUpRequiredNjë token aksesi duhet të verifikojë së pari një kod.
IsNotFoundAsgjë nuk e ka atë id, me një 404.
IsConflictNdryshimi bie ndesh me gjendjen aktuale, me një 409.
IsValidationNjë fushë u refuzua, me një 422.
IsRateLimitedShumë kërkesa, ose një kuotë është shpenzuar, me një 429.
IsInvalidRequestÇdo refuzim tjetër i kërkesës.
IsServerErrorAPI-ja dështoi, me një status 500 ose më të lartë.
IsRetryableStatusi është nga ata që klienti i riprovon.
IsTimeoutAsnjë përgjigje nuk mbërriti para afatit kohor. Kjo ndodhet te OpenEmailNetworkException.

Një gabim në vetë thirrjen, si një çelës i keqformuar ose një id bosh, hedh ArgumentException para se të dërgohet ndonjë gjë. Një token i anuluar hedh OperationCanceledException, dhe një dorëzim webhook-u që dështon në kontroll hedh OpenEmailWebhookException.

Një kod verifikimi

Një token aksesi vepron në emër të një personi, prandaj para një ndryshimi të ndjeshëm, si fshirja e një domeni, atij i kërkohet i njëjti kod verifikimi që kërkon aplikacioni web. Kërkoni një kod, kontrollojeni, pastaj bëjeni kërkesën sërish. Çelësave API nuk u kërkohet kurrë një i tillë.

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);}

Çfarë riprovohet

  • Leximet, dërgimet dhe çdo shkrim që është i sigurt për t'u përsëritur riprovohen, deri në MaxRetries herë. Çdo shkrim tjetër dërgohet një herë.
  • Statuset 408, 500, 502, 503 dhe 504 riprovohen me një pritje që nis nga gjysmë sekonde dhe dyfishohet deri në tetë sekonda.
  • Një 429 riprovohet vetëm kur mban një Retry-After prej një minute ose më pak, dhe klienti pret aq gjatë.
  • Një lidhje që dështon ose që e kalon afatin kohor riprovohet në të njëjtën mënyrë.

Një dërgim që riprovohet mban çdo herë të njëjtin çelës idempotence, kështu që API-ja e përsërit mesazhin e parë në vend që të dërgojë një të dytë.