ดังนั้นฉันคิดว่าฉันมีปัญหาที่คล้ายกัน ฉันกำลังมองหา swagger เพื่อสร้าง enums พร้อมกับ int -> string mapping API ต้องยอมรับ int ความผยองมีความสำคัญน้อยกว่าสิ่งที่ฉันต้องการจริงๆคือการสร้างรหัสด้วย enum "จริง" ในอีกด้านหนึ่ง (แอป Android ที่ใช้ชุดติดตั้งเพิ่มเติมในกรณีนี้)
ดังนั้นจากการวิจัยของฉันในที่สุดสิ่งนี้ดูเหมือนจะ จำกัด ข้อกำหนด OpenAPI ที่ Swagger ใช้ ไม่สามารถระบุชื่อและหมายเลขสำหรับ enums ได้
ปัญหาที่ดีที่สุดที่ฉันพบเพื่อติดตามคือhttps://github.com/OAI/OpenAPI-Specification/issues/681ซึ่งดูเหมือนว่า "อาจจะเร็ว ๆ นี้" แต่จากนั้น Swagger จะต้องได้รับการอัปเดตและในกรณีของฉัน Swashbuckle เป็น ดี.
สำหรับตอนนี้วิธีแก้ปัญหาของฉันคือการใช้ตัวกรองเอกสารที่ค้นหา enums และเติมคำอธิบายที่เกี่ยวข้องพร้อมกับเนื้อหาของ enum
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
c.DocumentFilter<SwaggerAddEnumDescriptions>();
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)
{
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);
}
}
}
if (swaggerDoc.paths.Count > 0)
{
foreach (PathItem pathItem in swaggerDoc.paths.Values)
{
DescribeEnumParameters(pathItem.parameters);
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 ของคุณอย่างน้อยคุณก็สามารถ "เห็นสิ่งที่คุณกำลังทำอยู่":