그래서 비슷한 문제가 있다고 생각합니다. int-> string mapping과 함께 enum을 생성하기 위해 swagger를 찾고 있습니다. API는 int를 허용해야합니다. swagger-ui는 덜 중요합니다. 제가 정말로 원하는 것은 다른쪽에 "실제"열거 형 (이 경우 개조를 사용하는 안드로이드 앱)을 사용하여 코드를 생성하는 것입니다.
그래서 내 연구에서 이것은 궁극적으로 Swagger가 사용하는 OpenAPI 사양의 한계 인 것 같습니다. 열거 형에 이름과 숫자를 지정할 수 없습니다.
내가 찾은 가장 좋은 문제는 https://github.com/OAI/OpenAPI-Specification/issues/681 입니다. "아마 곧"처럼 보이지만 Swagger를 업데이트해야하며 제 경우에는 Swashbuckle이 잘.
현재 내 해결 방법은 열거 형을 찾고 관련 설명을 열거 형의 내용으로 채우는 문서 필터를 구현하는 것입니다.
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
c.DocumentFilter<SwaggerAddEnumDescriptions>();
//disable this
//c.DescribeAllEnumsAsStrings()
SwaggerAddEnumDescriptions.cs :
using System;
using System.Web.Http.Description;
using Swashbuckle.Swagger;
using System.Collections.Generic;
public class SwaggerAddEnumDescriptions : IDocumentFilter
{
public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
{
// add enum descriptions to result models
foreach (KeyValuePair<string, Schema> schemaDictionaryItem in swaggerDoc.definitions)
{
Schema schema = schemaDictionaryItem.Value;
foreach (KeyValuePair<string, Schema> propertyDictionaryItem in schema.properties)
{
Schema property = propertyDictionaryItem.Value;
IList<object> propertyEnums = property.@enum;
if (propertyEnums != null && propertyEnums.Count > 0)
{
property.description += DescribeEnum(propertyEnums);
}
}
}
// add enum descriptions to input parameters
if (swaggerDoc.paths.Count > 0)
{
foreach (PathItem pathItem in swaggerDoc.paths.Values)
{
DescribeEnumParameters(pathItem.parameters);
// head, patch, options, delete left out
List<Operation> possibleParameterisedOperations = new List<Operation> { pathItem.get, pathItem.post, pathItem.put };
possibleParameterisedOperations.FindAll(x => x != null).ForEach(x => DescribeEnumParameters(x.parameters));
}
}
}
private void DescribeEnumParameters(IList<Parameter> parameters)
{
if (parameters != null)
{
foreach (Parameter param in parameters)
{
IList<object> paramEnums = param.@enum;
if (paramEnums != null && paramEnums.Count > 0)
{
param.description += DescribeEnum(paramEnums);
}
}
}
}
private string DescribeEnum(IList<object> enums)
{
List<string> enumDescriptions = new List<string>();
foreach (object enumOption in enums)
{
enumDescriptions.Add(string.Format("{0} = {1}", (int)enumOption, Enum.GetName(enumOption.GetType(), enumOption)));
}
return string.Join(", ", enumDescriptions.ToArray());
}
}
이렇게하면 swagger-ui에 다음과 같은 결과가 나타나므로 최소한 "당신이하는 일을 볼 수 있습니다".