Exemple #1
0
        internal static Type GetElementType(HttpActionDescriptor actionDescriptor)
        {
            Type returnType = actionDescriptor.ReturnType;

            if (returnType == typeof(HttpResponseMessage) || typeof(IHttpActionResult).IsAssignableFrom(actionDescriptor.ReturnType))
            {
                ResponseTypeAttribute responseType = actionDescriptor.GetCustomAttributes <ResponseTypeAttribute>(inherit: true).FirstOrDefault();
                if (responseType != null)
                {
                    returnType = responseType.ResponseType;
                }
            }

            if (returnType != null)
            {
                return(returnType.GetEnumerableElementType());
            }

            return(null);
        }
        public void GetElementType_DetectsResponseTypeAttribute(Type returnType, Type responseType, Type expected)
        {
            // Arrange
            ResponseTypeAttribute       responseTypeAttribute = new ResponseTypeAttribute(responseType);
            Mock <HttpActionDescriptor> descriptorMock        = new Mock <HttpActionDescriptor> {
                CallBase = true
            };

            descriptorMock.Setup <Type>(d => d.ReturnType)
            .Returns(returnType)
            .Verifiable();
            descriptorMock.Setup <Collection <ResponseTypeAttribute> >(d => d.GetCustomAttributes <ResponseTypeAttribute>(true))
            .Returns(new Collection <ResponseTypeAttribute> {
                responseTypeAttribute
            })
            .Verifiable();

            // Act
            Type actual = TableQueryFilter.GetElementType(descriptorMock.Object);

            // Assert
            Assert.Equal(expected, actual);
        }
        public static void AddResponse(OpenApiDocument document, OpenApiOperation operation, ResponseTypeAttribute responseTypeAttr)
        {
            OpenApiResponse response = new OpenApiResponse();

            response.Description = responseTypeAttr.Description;

            OpenApiSchema schema = new OpenApiSchema();

            schema.Properties = new Dictionary <string, OpenApiSchema>();
            schema.Type       = "object";
            schema.Properties = GetOpenApiProperties(responseTypeAttr.Type);

            var name = responseTypeAttr.Type.GetName();

            if (!document.Components.Schemas.ContainsKey(name))
            {
                document.Components.Schemas.Add(new KeyValuePair <string, OpenApiSchema>(name, schema));
            }

            var mediaType = GetOpenApiMediaType(responseTypeAttr.Type);

            response.Content.Add(new KeyValuePair <string, OpenApiMediaType>(name, mediaType));
            string statusCode = ((int)responseTypeAttr.StatusCode).ToString();

            operation.Responses.Add(statusCode, response);
        }