private void ApplyResponsesXmlToResponses(IDictionary <string, OpenApiResponse> responses, XPathNodeIterator responseNodes) { while (responseNodes.MoveNext()) { var code = responseNodes.Current.GetAttribute("code", ""); var response = responses.ContainsKey(code) ? responses[code] : responses[code] = new OpenApiResponse(); response.Description = XmlCommentsTextHelper.Humanize(responseNodes.Current.InnerXml); } }
private void ApplyMethodXmlToOperation(OpenApiOperation operation, XPathNavigator methodNode) { var summaryNode = methodNode.SelectSingleNode(SummaryXPath); if (summaryNode != null) { operation.Summary = XmlCommentsTextHelper.Humanize(summaryNode.InnerXml); } var remarksNode = methodNode.SelectSingleNode(RemarksXPath); if (remarksNode != null) { operation.Description = XmlCommentsTextHelper.Humanize(remarksNode.InnerXml); } }
private void ApplyParamsXmlToActionParameters( IList <OpenApiParameter> parameters, OpenApiRequestBody requestBody, ApiDescription apiDescription, XPathNavigator methodNode) { if (parameters == null) { return; } foreach (var parameter in parameters) { // Check for a corresponding action parameter? var actionParameter = apiDescription.ActionDescriptor.Parameters .FirstOrDefault(p => parameter.Name.Equals( (p.BindingInfo?.BinderModelName ?? p.Name), StringComparison.OrdinalIgnoreCase)); if (actionParameter == null) { continue; } var paramNode = methodNode.SelectSingleNode(string.Format(ParamXPath, actionParameter.Name)); if (paramNode != null) { parameter.Description = XmlCommentsTextHelper.Humanize(paramNode.InnerXml); } } if (requestBody != null) { var actionParameter = apiDescription.ParameterDescriptions .FirstOrDefault(p => p.IsFromBody()); if (actionParameter != null) { var paramNode = methodNode.SelectSingleNode(string.Format(ParamXPath, actionParameter.Name)); if (paramNode != null) { requestBody.Description = XmlCommentsTextHelper.Humanize(paramNode.InnerXml); } } } }
private void ApplyPropertiesXmlToPropertyParameters( IList <OpenApiParameter> parameters, ApiDescription apiDescription) { if (parameters == null) { return; } foreach (var parameter in parameters) { // Check for a corresponding API parameter (from ApiExplorer) that's property-bound? var propertyParam = apiDescription.ParameterDescriptions .Where(p => p.ModelMetadata?.ContainerType != null && p.ModelMetadata?.PropertyName != null) .FirstOrDefault(p => parameter.Name.Equals(p.Name, StringComparison.OrdinalIgnoreCase)); if (propertyParam == null) { continue; } var metadata = propertyParam.ModelMetadata; var memberInfo = metadata.ContainerType.GetMember(metadata.PropertyName).FirstOrDefault(); if (memberInfo == null) { continue; } var memberName = XmlCommentsMemberNameHelper.GetMemberNameForMember(memberInfo); var memberNode = _xmlNavigator.SelectSingleNode(string.Format(MemberXPath, memberName)); if (memberNode == null) { continue; } var summaryNode = memberNode.SelectSingleNode(SummaryXPath); if (summaryNode != null) { parameter.Description = XmlCommentsTextHelper.Humanize(summaryNode.InnerXml); } } }
public void Apply(OpenApiSchema schema, SchemaFilterContext context) { var jsonObjectContract = context.JsonContract as JsonObjectContract; if (jsonObjectContract == null) { return; } var memberName = XmlCommentsMemberNameHelper.GetMemberNameForType(context.Type); var typeNode = _xmlNavigator.SelectSingleNode(string.Format(MemberXPath, memberName)); if (typeNode != null) { var summaryNode = typeNode.SelectSingleNode(SummaryTag); if (summaryNode != null) { schema.Description = XmlCommentsTextHelper.Humanize(summaryNode.InnerXml); } } if (schema.Properties == null) { return; } foreach (var entry in schema.Properties) { if (!jsonObjectContract.Properties.Contains(entry.Key)) { continue; } var jsonProperty = jsonObjectContract.Properties[entry.Key]; if (jsonProperty.TryGetMemberInfo(out MemberInfo memberInfo)) { ApplyPropertyComments(entry.Value, memberInfo); } } }