in src/Microsoft.OpenApi.CSharpAnnotations.DocumentGeneration/PreprocessingOperationFilters/PopulateInAttributeFilter.cs [31:92]
public IList<GenerationError> Apply(
OpenApiPaths paths,
XElement element,
PreProcessingOperationFilterSettings settings)
{
var generationErrors = new List<GenerationError>();
try
{
var paramElementsWithoutIn = element.Elements().Where(
p => p.Name == KnownXmlStrings.Param
&& p.Attribute(KnownXmlStrings.In)?.Value == null)
.ToList();
var url = element.Elements()
.FirstOrDefault(p => p.Name == KnownXmlStrings.Url)
?.Value;
if (!string.IsNullOrWhiteSpace(url))
{
foreach (var paramElement in paramElementsWithoutIn)
{
var paramName = paramElement.Attribute(KnownXmlStrings.Name)?.Value;
if (url.Contains(
$"/{{{paramName}}}",
StringComparison.InvariantCultureIgnoreCase) &&
url.Contains(
$"={{{paramName}}}",
StringComparison.InvariantCultureIgnoreCase))
{
// The parameter is in both path and query. We cannot determine what to put for "in" attribute.
throw new ConflictingPathAndQueryParametersException(paramName, url);
}
if (url.Contains(
$"/{{{paramName}}}",
StringComparison.InvariantCultureIgnoreCase))
{
paramElement.Add(new XAttribute(KnownXmlStrings.In, KnownXmlStrings.Path));
}
else if (url.Contains(
$"={{{paramName}}}",
StringComparison.InvariantCultureIgnoreCase))
{
paramElement.Add(new XAttribute(KnownXmlStrings.In, KnownXmlStrings.Query));
}
}
}
}
catch(Exception ex)
{
generationErrors.Add(
new GenerationError
{
Message = ex.Message,
ExceptionType = ex.GetType().Name
});
}
return generationErrors;
}