दस्तावेज़ पर जाएँ
C#

एरर और रीट्राई

हर इनकार के लिए एक ही एक्सेप्शन टाइप, हर तरह के लिए एक प्रॉपर्टी, और ऐसे रीट्राई जो दो बार नहीं भेज सकते।

एरर को संभालना

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

API का इनकार OpenEmailApiException थ्रो करता है, और कोई जवाब न आना OpenEmailNetworkException थ्रो करता है। दोनों OpenEmailException से निकले हैं, इसलिए एक ही catch दोनों को पकड़ लेता है, और when फ़िल्टर तरह चुनता है।

प्रॉपर्टीइसमें क्या है
StatusHTTP स्टेटस।
ErrorType, CodeAPI का एरर टाइप और कोड, जैसे validation_error और invalid_parameter।
Paramवह फ़ील्ड जो ज़िम्मेदार है, जब ऐसा कोई फ़ील्ड हो।
RequestIdवह id जो सहायता टीम को लिखते समय बतानी चाहिए।
DocUrlदस्तावेज़ का वह पेज जो कोड को समझाता है।
RetryAfterSecondsAPI ने आपसे कितनी देर प्रतीक्षा करने को कहा, सेकंड में।
Fieldsवे फ़ील्ड जिन्हें साइन-अप फ़ॉर्म ने अस्वीकार किया, हर एक के साथ एक key और एक error।
Bodyडिकोड की हुई जवाब बॉडी।

विफलता के प्रकार

प्रॉपर्टीयह कब true होती है
IsAuthकुंजी या टोकन अस्वीकार हुआ, 401 के साथ।
IsPermissionइस क्रेडेंशियल को यह करने की अनुमति नहीं है, 403 के साथ।
IsScopeMissingक्रेडेंशियल में वह स्कोप नहीं है जो कॉल को चाहिए।
IsStepUpRequiredएक्सेस टोकन को पहले एक कोड सत्यापित करना होगा।
IsNotFoundउस id वाली कोई चीज़ नहीं है, 404 के साथ।
IsConflictबदलाव मौजूदा स्थिति से टकराता है, 409 के साथ।
IsValidationएक फ़ील्ड अस्वीकार हुआ, 422 के साथ।
IsRateLimitedबहुत ज़्यादा अनुरोध, या कोई कोटा खत्म हो गया, 429 के साथ।
IsInvalidRequestअनुरोध का कोई भी अन्य इनकार।
IsServerErrorAPI विफल हुआ, 500 या उससे ऊपर के स्टेटस के साथ।
IsRetryableस्टेटस उनमें से है जिन्हें क्लाइंट दोबारा आज़माता है।
IsTimeoutटाइमआउट से पहले कोई जवाब नहीं आया। यह प्रॉपर्टी OpenEmailNetworkException पर है।

खुद कॉल में हुई गलती, जैसे गलत बनावट वाली कुंजी या खाली id, कुछ भी भेजे जाने से पहले ArgumentException थ्रो करती है। रद्द किया गया टोकन OperationCanceledException थ्रो करता है, और जाँच में विफल वेबहुक डिलीवरी OpenEmailWebhookException थ्रो करती है।

सत्यापन कोड

एक्सेस टोकन किसी व्यक्ति की ओर से काम करता है, इसलिए किसी संवेदनशील बदलाव से पहले, जैसे डोमेन हटाना, उससे वही सत्यापन कोड माँगा जाता है जो वेब ऐप माँगता है। एक कोड माँगें, उसे जाँचें, फिर अनुरोध दोबारा करें। API कुंजियों से कभी कोड नहीं माँगा जाता।

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

क्या दोबारा आज़माया जाता है

  • पढ़ने वाली कॉल, भेजने वाली कॉल और हर वह लिखने वाली कॉल जिसे दोहराना सुरक्षित है, MaxRetries बार तक दोबारा आज़माई जाती है। कोई भी अन्य लिखने वाली कॉल एक बार भेजी जाती है।
  • स्टेटस 408, 500, 502, 503 और 504 को ऐसे इंतज़ार के साथ दोबारा आज़माया जाता है जो आधे सेकंड से शुरू होता है और आठ सेकंड तक दोगुना होता जाता है।
  • 429 को तभी दोबारा आज़माया जाता है जब उसके साथ एक मिनट या उससे कम का Retry-After हो, और क्लाइंट उतनी देर प्रतीक्षा करता है।
  • जो कनेक्शन विफल होता है या जिसका टाइमआउट हो जाता है उसे भी इसी तरह दोबारा आज़माया जाता है।

दोबारा आज़माई गई भेजने वाली कॉल हर बार वही आइडेम्पोटेंसी कुंजी रखती है, इसलिए API दूसरा संदेश भेजने के बजाय पहला संदेश दोहराता है।