簡體   English   中英

使用 Swashbuckle 編輯 Swagger 中的媒體類型

[英]Editing media type in Swagger with Swashbuckle

我正在嘗試在 ASP .NET Core 中創建一個簡單的 POC 應用程序。 目標是將端點的示例值和媒體類型編輯為自定義值,例如 CSV。 我只是使用基本的天氣預報模板應用程序來嘗試一下,代碼如下所示:

    [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;
        }
        
        [HttpGet("weather")]
        [Produces("text/csv")]
        [SwaggerResponseExample(200, typeof(ForecastExample))]
        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 = Summaries[Random.Shared.Next(Summaries.Length)]
                })
                .ToArray();
        }
    }

我改變的事情是:

  • 安裝了 Swashbuckle.AspNetCore.Filters
  • 將 [Produces("text/csv")] 屬性標記添加到 GET 端點,這將 Swagger 中的媒體類型更改為 text/csv(這很好用)
  • 將 [SwaggerResponseExample(200, typeof(ForecastExample))] 屬性添加到 GET 端點 - 這應該會更改 Swagger 中的示例,但它不起作用

我在 Program.cs 中注冊了 ExamplesOperationFilter,如下所示:

builder.Services.AddSwaggerExamples();

應該定義響應的 ForecastExample class 如下所示:

    public class ForecastExample : IExamplesProvider<string>
    {
        public string GetExamples()
        {
            return "test";
        }
    }

使用此代碼,我希望看到 Swagger 中的示例值只是說“測試”,但它看起來像這樣:

在此處輸入圖像描述

我一直在按照這里描述的步驟https://freesoft.dev/program/89951254但我想我錯過了一些重要的東西。 提前感謝您的幫助!

你需要像這樣配置你的'program.cs'

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
//.......
builder.Services.AddSwaggerGen(c =>
{
    c.ExampleFilters();
});

builder.Services.AddSwaggerExamplesFromAssemblyOf<ForecastExample>();
//.......

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM