From 79e576b86c040d676dcd96a6e666dc75f79da211 Mon Sep 17 00:00:00 2001 From: Jass Bagga Date: Wed, 19 Oct 2016 17:08:06 -0700 Subject: [PATCH] ProducesResponseTypeAttribute(int statusCode) ctor added Addresses #4863 --- .../ProducesResponseTypeAttribute.cs | 9 ++++++++ .../DefaultApiDescriptionProviderTest.cs | 23 +++++++++++++++---- .../ProducesAttributeTests.cs | 2 +- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ProducesResponseTypeAttribute.cs b/src/Microsoft.AspNetCore.Mvc.Core/ProducesResponseTypeAttribute.cs index 126310817c..7c0d25c6a4 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ProducesResponseTypeAttribute.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ProducesResponseTypeAttribute.cs @@ -13,6 +13,15 @@ namespace Microsoft.AspNetCore.Mvc [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] public class ProducesResponseTypeAttribute : Attribute, IApiResponseMetadataProvider { + /// + /// Initializes an instance of . + /// + /// The HTTP response status code. + public ProducesResponseTypeAttribute(int statusCode) + : this(typeof(void), statusCode) + { + } + /// /// Initializes an instance of . /// diff --git a/test/Microsoft.AspNetCore.Mvc.ApiExplorer.Test/DefaultApiDescriptionProviderTest.cs b/test/Microsoft.AspNetCore.Mvc.ApiExplorer.Test/DefaultApiDescriptionProviderTest.cs index e58a76610e..07a84637a7 100644 --- a/test/Microsoft.AspNetCore.Mvc.ApiExplorer.Test/DefaultApiDescriptionProviderTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.ApiExplorer.Test/DefaultApiDescriptionProviderTest.cs @@ -423,12 +423,15 @@ namespace Microsoft.AspNetCore.Mvc.Description new FilterDescriptor( new ProducesAttribute("text/json", "application/json") { Type = typeof(Customer) }, FilterScope.Action), + new FilterDescriptor( + new ProducesResponseTypeAttribute(304), + FilterScope.Action), new FilterDescriptor( new ProducesResponseTypeAttribute(typeof(BadData), 400), FilterScope.Action), new FilterDescriptor( new ProducesResponseTypeAttribute(typeof(ErrorDetails), 500), - FilterScope.Action) + FilterScope.Action), }; return new TheoryData> @@ -443,11 +446,16 @@ namespace Microsoft.AspNetCore.Mvc.Description nameof(DefaultApiDescriptionProviderTest.ReturnsActionResult), filterDescriptors }, + { + typeof(DefaultApiDescriptionProviderTest), + nameof(DefaultApiDescriptionProviderTest.ReturnsActionResult), + filterDescriptors + }, { typeof(DerivedProducesController), nameof(DerivedProducesController.ReturnsActionResult), filterDescriptors - }, + } }; } } @@ -469,7 +477,7 @@ namespace Microsoft.AspNetCore.Mvc.Description // Assert var description = Assert.Single(descriptions); - Assert.Equal(3, description.SupportedResponseTypes.Count); + Assert.Equal(4, description.SupportedResponseTypes.Count); Assert.Collection( description.SupportedResponseTypes.OrderBy(responseType => responseType.StatusCode), @@ -481,6 +489,13 @@ namespace Microsoft.AspNetCore.Mvc.Description Assert.Equal(expectedMediaTypes, GetSortedMediaTypes(responseType)); }, responseType => + { + Assert.Equal(304, responseType.StatusCode); + Assert.Equal(typeof(void), responseType.Type); + Assert.Null(responseType.ModelMetadata); + Assert.Empty(responseType.ApiResponseFormats); + }, + responseType => { Assert.Equal(400, responseType.StatusCode); Assert.Equal(typeof(BadData), responseType.Type); @@ -509,7 +524,7 @@ namespace Microsoft.AspNetCore.Mvc.Description new ProducesAttribute("text/json", "application/json"), FilterScope.Action), new FilterDescriptor( - new ProducesResponseTypeAttribute(typeof(void), 200), + new ProducesResponseTypeAttribute(200), FilterScope.Action), new FilterDescriptor( new ProducesResponseTypeAttribute(typeof(BadData), 400), diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ProducesAttributeTests.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ProducesAttributeTests.cs index 4c57efd1a2..8ae4563270 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ProducesAttributeTests.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ProducesAttributeTests.cs @@ -126,7 +126,7 @@ namespace Microsoft.AspNetCore.Mvc.Test () => new ProducesAttribute(contentTypes[0], contentTypes.Skip(1).ToArray())); Assert.Equal( - string.Format("The argument '{0}' is invalid. "+ + string.Format("The argument '{0}' is invalid. " + "Media types which match all types or match all subtypes are not supported.", invalidContentType), ex.Message);