private void ApplyMethodTags(OpenApiOperation operation, MethodInfo methodInfo) { var methodMemberName = XmlCommentsNodeNameHelper.GetMemberNameForMethod(methodInfo); var methodNode = _xmlNavigator.SelectSingleNode($"/doc/members/member[@name='{methodMemberName}']"); if (methodNode == null) { return; } var summaryNode = methodNode.SelectSingleNode("summary"); if (summaryNode != null) { operation.Summary = XmlCommentsTextHelper.Humanize(summaryNode.InnerXml); } var remarksNode = methodNode.SelectSingleNode("remarks"); if (remarksNode != null) { operation.Description = XmlCommentsTextHelper.Humanize(remarksNode.InnerXml); } var responseNodes = methodNode.Select("response"); ApplyResponseTags(operation, responseNodes); }
private void ApplyParamTags(OpenApiRequestBody requestBody, ParameterInfo parameterInfo) { if (!(parameterInfo.Member is MethodInfo methodInfo)) { return; } // If method is from a constructed generic type, look for comments from the generic type method var targetMethod = methodInfo.DeclaringType.IsConstructedGenericType ? methodInfo.GetUnderlyingGenericTypeMethod() : methodInfo; if (targetMethod == null) { return; } var methodMemberName = XmlCommentsNodeNameHelper.GetMemberNameForMethod(targetMethod); var paramNode = _xmlNavigator.SelectSingleNode( $"/doc/members/member[@name='{methodMemberName}']/param[@name='{parameterInfo.Name}']"); if (paramNode != null) { requestBody.Description = XmlCommentsTextHelper.Humanize(paramNode.InnerXml); } }
private void ApplyParamTags(OpenApiParameter parameter, ParameterInfo parameterInfo) { if (!(parameterInfo.Member is MethodInfo methodInfo)) { return; } // If method is from a constructed generic type, look for comments from the generic type method var targetMethod = methodInfo.DeclaringType.IsConstructedGenericType ? methodInfo.GetUnderlyingGenericTypeMethod() : methodInfo; if (targetMethod == null) { return; } var methodMemberName = XmlCommentsNodeNameHelper.GetMemberNameForMethod(targetMethod); var paramNode = _xmlNavigator.SelectSingleNode( $"/doc/members/member[@name='{methodMemberName}']/param[@name='{parameterInfo.Name}']"); if (paramNode != null) { parameter.Description = XmlCommentsTextHelper.Humanize(paramNode.InnerXml); var example = paramNode.GetAttribute("example", ""); if (!string.IsNullOrEmpty(example)) { parameter.Example = ConvertToOpenApiType(parameterInfo.ParameterType, parameter.Schema, example); } } }
private void ApplyParamTags(OpenApiSchema schema, ParameterInfo parameterInfo) { if (!(parameterInfo.Member is MethodInfo methodInfo)) { return; } var methodMemberName = XmlCommentsNodeNameHelper.GetMemberNameForMethod(methodInfo); var paramNode = _xmlNavigator.SelectSingleNode( $"/doc/members/member[@name='{methodMemberName}']/param[@name='{parameterInfo.Name}']"); if (paramNode != null) { schema.Description = XmlCommentsTextHelper.Humanize(paramNode.InnerXml); } }
private void ApplyParamTags(OpenApiRequestBody requestBody, RequestBodyFilterContext context, ParameterInfo parameterInfo) { if (!(parameterInfo.Member is MethodInfo methodInfo)) { return; } // If method is from a constructed generic type, look for comments from the generic type method var targetMethod = methodInfo.DeclaringType.IsConstructedGenericType ? methodInfo.GetUnderlyingGenericTypeMethod() : methodInfo; if (targetMethod == null) { return; } var methodMemberName = XmlCommentsNodeNameHelper.GetMemberNameForMethod(targetMethod); var paramNode = _xmlNavigator.SelectSingleNode( $"/doc/members/member[@name='{methodMemberName}']/param[@name='{parameterInfo.Name}']"); if (paramNode != null) { requestBody.Description = XmlCommentsTextHelper.Humanize(paramNode.InnerXml); var example = paramNode.GetAttribute("example", ""); if (string.IsNullOrEmpty(example)) { return; } foreach (var mediaType in requestBody.Content.Values) { var exampleAsJson = (mediaType.Schema?.ResolveType(context.SchemaRepository) == "string") ? $"\"{example}\"" : example; mediaType.Example = OpenApiAnyFactory.CreateFromJson(exampleAsJson); } } }
public void Apply(OpenApiOperation operation, OperationFilterContext context) { if (context.MethodInfo == null) { return; } // If method is from a constructed generic type, look for comments from the generic type method var targetMethod = context.MethodInfo.DeclaringType.IsConstructedGenericType ? GetGenericTypeMethodOrNullFor(context.MethodInfo) : context.MethodInfo; if (targetMethod == null) { return; } var typeMemberName = XmlCommentsNodeNameHelper.GetMemberNameForType(targetMethod.DeclaringType); var typeNode = _xmlNavigator.SelectSingleNode(string.Format(MemberXPath, typeMemberName)); // Apply controller-level tags if any if (typeNode != null) { ApplyResponsesXmlToResponses(operation.Responses, typeNode.Select(ResponsesXPath)); } var methodMemberName = XmlCommentsNodeNameHelper.GetMemberNameForMethod(targetMethod); var methodNode = _xmlNavigator.SelectSingleNode(string.Format(MemberXPath, methodMemberName)); // Apply method-level tags if (methodNode != null) { ApplyMethodXmlToOperation(operation, methodNode); ApplyParamsXmlToActionParameters(operation.Parameters, operation.RequestBody, context.ApiDescription, methodNode); ApplyResponsesXmlToResponses(operation.Responses, methodNode.Select(ResponsesXPath)); // will override controller-level response tags } // Special handling for parameters that are bound to model properties ApplyPropertiesXmlToPropertyParameters(operation.Parameters, context.ApiDescription); }
private void ApplyParamTags(OpenApiSchema schema, ParameterInfo parameterInfo) { if (!(parameterInfo.Member is MethodInfo methodInfo)) { return; } var methodMemberName = XmlCommentsNodeNameHelper.GetMemberNameForMethod(methodInfo); var paramNode = _xmlNavigator.SelectSingleNode( $"/doc/members/member[@name='{methodMemberName}']/param[@name='{parameterInfo.Name}']"); if (paramNode != null) { schema.Description = XmlCommentsTextHelper.Humanize(paramNode.InnerXml); var example = paramNode.GetAttribute("example", ""); if (!string.IsNullOrEmpty(example)) { schema.Example = ConvertToOpenApiType(parameterInfo.ParameterType, schema, example); } } }