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