-
[ASP.NET Core] WebApi with Swagger - 5. enum.NET/ASP.NET Core 2023. 2. 18. 13:26반응형
아래와 같은 Controller 소스가 있다.
using Microsoft.AspNetCore.Mvc; namespace swagger_5_enum.Controllers; [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" }; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger) { _logger = logger; } /// <summary> /// 날씨 데이터를 제공합니다. /// </summary> /// <returns></returns> [HttpGet(Name = "GetWeatherForecast")] public IEnumerable<WeatherForecast> Get() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = Enum.Parse<WeatherSummary>(Summaries[Random.Shared.Next(Summaries.Length)]) }) .ToArray(); } /// <summary> /// 입력받은 날씨 요약으로 날씨 데이터를 제공합니다. /// </summary> /// <param name="summary"></param> /// <returns></returns> [HttpGet("WeatherSummary", Name = "GetWeatherForecastBySummary")] public IEnumerable<WeatherForecast> Get([FromQuery] WeatherSummary summary) { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { Date = DateTime.Now.AddDays(index), TemperatureC = Random.Shared.Next(-20, 55), Summary = summary }) .ToArray(); } }
해당 컨트롤러 중 GetWeatherForecastBySummary 이름을 가진 GET 액션 함수는 WeatherSummary를 파라메터로 받는다. 이를 Swagger 문서로 표현하면 아래와 같이 나온다.
어떤 숫자가 "Freezing"이고, "Bracing"인지 알 수 없다. 이 경우엔 JsonOption을 수정하여 String 형식으로 바꿀 수 있다.
Program.cs 에 JsonOptions을 추가한다.
builder.Services.AddControllers() .AddJsonOptions( options => { options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); } );
반응형'.NET > ASP.NET Core' 카테고리의 다른 글