diff --git a/Refit.Tests/MultipartTests.cs b/Refit.Tests/MultipartTests.cs index b3364dc..5e865d2 100644 --- a/Refit.Tests/MultipartTests.cs +++ b/Refit.Tests/MultipartTests.cs @@ -429,7 +429,7 @@ namespace Refit.Tests Assert.Equal("theObject", parts[0].Headers.ContentDisposition.Name); Assert.Null(parts[0].Headers.ContentDisposition.FileName); Assert.Equal(mediaType, parts[0].Headers.ContentType.MediaType); - var result0 = await serializer.DeserializeAsync(parts[0]); + var result0 = await serializer.DeserializeAsync(parts[0]).ConfigureAwait(false); Assert.Equal(model1.Property1, result0.Property1); Assert.Equal(model1.Property2, result0.Property2); } @@ -477,7 +477,7 @@ namespace Refit.Tests Assert.Equal("theObjects", parts[0].Headers.ContentDisposition.Name); Assert.Null(parts[0].Headers.ContentDisposition.FileName); Assert.Equal(mediaType, parts[0].Headers.ContentType.MediaType); - var result0 = await serializer.DeserializeAsync( parts[0]); + var result0 = await serializer.DeserializeAsync( parts[0]).ConfigureAwait(false); Assert.Equal(model1.Property1, result0.Property1); Assert.Equal(model1.Property2, result0.Property2); @@ -485,7 +485,7 @@ namespace Refit.Tests Assert.Equal("theObjects", parts[1].Headers.ContentDisposition.Name); Assert.Null(parts[1].Headers.ContentDisposition.FileName); Assert.Equal(mediaType, parts[1].Headers.ContentType.MediaType); - var result1 = await serializer.DeserializeAsync(parts[1]); + var result1 = await serializer.DeserializeAsync(parts[1]).ConfigureAwait(false); Assert.Equal(model2.Property1, result1.Property1); Assert.Equal(model2.Property2, result1.Property2); } @@ -534,7 +534,7 @@ namespace Refit.Tests Assert.Equal("theObjects", parts[0].Headers.ContentDisposition.Name); Assert.Null(parts[0].Headers.ContentDisposition.FileName); Assert.Equal("application/json", parts[0].Headers.ContentType.MediaType); - var result0 = JsonConvert.DeserializeObject(await parts[0].ReadAsStringAsync()); + var result0 = JsonConvert.DeserializeObject(await parts[0].ReadAsStringAsync().ConfigureAwait(false)); Assert.Equal(model1.Property1, result0.Property1); Assert.Equal(model1.Property2, result0.Property2); @@ -542,14 +542,14 @@ namespace Refit.Tests Assert.Equal("theObjects", parts[1].Headers.ContentDisposition.Name); Assert.Null(parts[1].Headers.ContentDisposition.FileName); Assert.Equal("application/json", parts[1].Headers.ContentType.MediaType); - var result1 = JsonConvert.DeserializeObject(await parts[1].ReadAsStringAsync()); + var result1 = JsonConvert.DeserializeObject(await parts[1].ReadAsStringAsync().ConfigureAwait(false)); Assert.Equal(model2.Property1, result1.Property1); Assert.Equal(model2.Property2, result1.Property2); Assert.Equal("anotherModel", parts[2].Headers.ContentDisposition.Name); Assert.Null(parts[2].Headers.ContentDisposition.FileName); Assert.Equal("application/json", parts[2].Headers.ContentType.MediaType); - var result2 = JsonConvert.DeserializeObject(await parts[2].ReadAsStringAsync()); + var result2 = JsonConvert.DeserializeObject(await parts[2].ReadAsStringAsync().ConfigureAwait(false)); Assert.Equal(2, result2.Foos.Length); Assert.Equal("bar1", result2.Foos[0]); Assert.Equal("bar2", result2.Foos[1]); @@ -567,7 +567,7 @@ namespace Refit.Tests Assert.Equal("anEnum", parts[4].Headers.ContentDisposition.Name); Assert.Null(parts[4].Headers.ContentDisposition.FileName); Assert.Equal("application/json", parts[4].Headers.ContentType.MediaType); - var result4 = JsonConvert.DeserializeObject(await parts[4].ReadAsStringAsync()); + var result4 = JsonConvert.DeserializeObject(await parts[4].ReadAsStringAsync().ConfigureAwait(false)); Assert.Equal(AnEnum.Val2, result4); Assert.Equal("aString", parts[5].Headers.ContentDisposition.Name); @@ -579,7 +579,7 @@ namespace Refit.Tests Assert.Equal("anInt", parts[6].Headers.ContentDisposition.Name); Assert.Null(parts[6].Headers.ContentDisposition.FileName); Assert.Equal("application/json", parts[6].Headers.ContentType.MediaType); - var result6 = JsonConvert.DeserializeObject(await parts[6].ReadAsStringAsync()); + var result6 = JsonConvert.DeserializeObject(await parts[6].ReadAsStringAsync().ConfigureAwait(false)); Assert.Equal(42, result6); } @@ -630,7 +630,7 @@ namespace Refit.Tests Assert.Equal("myName", parts[0].Headers.ContentDisposition.Name); Assert.Equal("myFileName", parts[0].Headers.ContentDisposition.FileName); Assert.Equal("application/custom", parts[0].Headers.ContentType.MediaType); - var result0 = await parts[0].ReadAsStringAsync(); + var result0 = await parts[0].ReadAsStringAsync().ConfigureAwait(false); Assert.Equal("some text", result0); } }; diff --git a/Refit/ApiException.cs b/Refit/ApiException.cs index e02be4e..cfb7590 100644 --- a/Refit/ApiException.cs +++ b/Refit/ApiException.cs @@ -54,12 +54,14 @@ namespace Refit try { - if (response.Content.Headers.ContentType.MediaType.Equals("application/problem+json")) - { - exception = ValidationApiException.Create(exception); - } exception.ContentHeaders = response.Content.Headers; exception.Content = await response.Content.ReadAsStringAsync().ConfigureAwait(false); + + if (response.Content.Headers.ContentType.MediaType.Equals("application/problem+json")) + { + exception = await ValidationApiException.Create(exception).ConfigureAwait(false); + } + response.Content.Dispose(); } catch diff --git a/Refit/RequestBuilderImplementation.cs b/Refit/RequestBuilderImplementation.cs index b0d6081..7f6b301 100644 --- a/Refit/RequestBuilderImplementation.cs +++ b/Refit/RequestBuilderImplementation.cs @@ -222,7 +222,7 @@ namespace Refit throw new InvalidOperationException("BaseAddress must be set on the HttpClient instance"); var factory = BuildRequestFactoryForMethod(restMethod, client.BaseAddress.AbsolutePath, restMethod.CancellationToken != null); - var rq = await factory(paramList); + var rq = await factory(paramList).ConfigureAwait(false); HttpResponseMessage resp = null; HttpContent content = null; var disposeResponse = true; @@ -575,12 +575,12 @@ namespace Refit { foreach (var item in enumerable) { - await AddMultipartItemAsync(multiPartContent, itemName, parameterName, item); + await AddMultipartItemAsync(multiPartContent, itemName, parameterName, item).ConfigureAwait(false); } } else { - await AddMultipartItemAsync(multiPartContent, itemName, parameterName, itemValue); + await AddMultipartItemAsync(multiPartContent, itemName, parameterName, itemValue).ConfigureAwait(false); } } @@ -671,7 +671,7 @@ namespace Refit throw new InvalidOperationException("BaseAddress must be set on the HttpClient instance"); var factory = BuildRequestFactoryForMethod(restMethod, client.BaseAddress.AbsolutePath, restMethod.CancellationToken != null); - var rq = await factory(paramList); + var rq = await factory(paramList).ConfigureAwait(false); var ct = CancellationToken.None; diff --git a/Refit/ValidationApiException.cs b/Refit/ValidationApiException.cs index bdd96b0..7a7d600 100644 --- a/Refit/ValidationApiException.cs +++ b/Refit/ValidationApiException.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; namespace Refit { @@ -14,19 +15,24 @@ namespace Refit { } +#pragma warning disable VSTHRD200 // Use "Async" suffix for async methods /// /// Creates a new instance of a ValidationException from an existing ApiException. /// /// An instance of an ApiException to use to build a ValidationException. /// ValidationApiException - public static ValidationApiException Create(ApiException exception) + public static async Task Create(ApiException exception) +#pragma warning restore VSTHRD200 { - return new ValidationApiException(exception); + return new ValidationApiException(exception) + { + Content = await exception.GetContentAsAsync() + }; } /// /// The problem details of the RFC 7807 validation exception. /// - public new ProblemDetails Content => GetContentAsAsync().ConfigureAwait(false).GetAwaiter().GetResult(); + public new ProblemDetails Content { get; private set; } } }