diff --git a/src/SendGrid/Reliability/ReliabilitySettings.cs b/src/SendGrid/Reliability/ReliabilitySettings.cs
index bc202fcd8..7a71cbc9c 100644
--- a/src/SendGrid/Reliability/ReliabilitySettings.cs
+++ b/src/SendGrid/Reliability/ReliabilitySettings.cs
@@ -4,6 +4,8 @@
//
using System;
+using System.Collections.Generic;
+using System.Net;
namespace SendGrid.Helpers.Reliability
{
@@ -89,5 +91,21 @@ public ReliabilitySettings(int maximumNumberOfRetries, TimeSpan minimumBackoff,
/// Gets the value that will be used to calculate a random delta in the exponential delay between retries. Defaults to 1 second.
///
public TimeSpan DeltaBackOff { get; }
+
+ ///
+ /// Gets status codes for which request would be retied.
+ ///
+ public List RetriableServerErrorStatusCodes { get; } = new List(DefaultRetriableServerErrorStatusCodes);
+
+ ///
+ /// Gets default status codes for which request would be retied.
+ ///
+ public static List DefaultRetriableServerErrorStatusCodes { get; } = new List()
+ {
+ HttpStatusCode.InternalServerError,
+ HttpStatusCode.BadGateway,
+ HttpStatusCode.ServiceUnavailable,
+ HttpStatusCode.GatewayTimeout,
+ };
}
}
\ No newline at end of file
diff --git a/src/SendGrid/Reliability/RetryDelegatingHandler.cs b/src/SendGrid/Reliability/RetryDelegatingHandler.cs
index c212513de..617663d84 100644
--- a/src/SendGrid/Reliability/RetryDelegatingHandler.cs
+++ b/src/SendGrid/Reliability/RetryDelegatingHandler.cs
@@ -4,8 +4,7 @@
//
using System;
-using System.Collections.Generic;
-using System.Net;
+using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
@@ -17,15 +16,6 @@ namespace SendGrid.Helpers.Reliability
///
public class RetryDelegatingHandler : DelegatingHandler
{
- private static readonly List RetriableServerErrorStatusCodes =
- new List()
- {
- HttpStatusCode.InternalServerError,
- HttpStatusCode.BadGateway,
- HttpStatusCode.ServiceUnavailable,
- HttpStatusCode.GatewayTimeout,
- };
-
private readonly ReliabilitySettings settings;
///
@@ -69,7 +59,7 @@ protected override async Task SendAsync(HttpRequestMessage
{
responseMessage = await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
- ThrowHttpRequestExceptionIfResponseCodeCanBeRetried(responseMessage);
+ this.ThrowHttpRequestExceptionIfResponseCodeCanBeRetried(responseMessage);
sent = true;
}
@@ -101,9 +91,9 @@ protected override async Task SendAsync(HttpRequestMessage
return responseMessage;
}
- private static void ThrowHttpRequestExceptionIfResponseCodeCanBeRetried(HttpResponseMessage responseMessage)
+ private void ThrowHttpRequestExceptionIfResponseCodeCanBeRetried(HttpResponseMessage responseMessage)
{
- if (RetriableServerErrorStatusCodes.Contains(responseMessage.StatusCode))
+ if (this.settings.RetriableServerErrorStatusCodes.Contains(responseMessage.StatusCode))
{
throw new HttpRequestException(string.Format("Http status code '{0}' indicates server error", responseMessage.StatusCode));
}
diff --git a/tests/SendGrid.Tests/Reliability/ReliabilitySettingsTests.cs b/tests/SendGrid.Tests/Reliability/ReliabilitySettingsTests.cs
index 5357b078f..10bd62978 100644
--- a/tests/SendGrid.Tests/Reliability/ReliabilitySettingsTests.cs
+++ b/tests/SendGrid.Tests/Reliability/ReliabilitySettingsTests.cs
@@ -99,6 +99,7 @@ public void ShouldPassValidValuesFromDefaultConstruct()
Assert.Equal(TimeSpan.Zero, defaultSettings.MinimumBackOff);
Assert.Equal(TimeSpan.Zero, defaultSettings.DeltaBackOff);
Assert.Equal(0, defaultSettings.MaximumNumberOfRetries);
+ Assert.Equal(ReliabilitySettings.DefaultRetriableServerErrorStatusCodes, defaultSettings.RetriableServerErrorStatusCodes);
}
[Fact]