指定请求模型类型以进行swagger. ASP.NET Core 6

3ks5zfa0  于 2023-03-02  发布在  .NET
关注(0)|答案(1)|浏览(166)

我使用自定义模型绑定器将请求主体绑定到端点参数。参数是CartItem,我想为Swagger指定输入模型类型CartItemRequest。我可以使用类似于[ProducesResponseType]属性但用于请求类型的属性吗?

[HttpPut("put-item/{customerId}")]
 [ProducesResponseType(400)]
 [ProducesResponseType(404)]
 [ProducesResponseType(200)]
 public async Task<IActionResult> PutItemToCart(
   [GuidId] Guid customerId, 
   [FromBody] CartItem item) // I want to show CartItemRequest in swagger instead of CartItem
 {
       // some code
 }
w80xi6nr

w80xi6nr1#

[SwaggerRequestExample]可能有助于解决您的问题。首先,您需要安装Swashbuckle.AspNetCore.Filters NuGet包。
下一步是注册所需的依赖项:

using Swashbuckle.AspNetCore.Filters;

builder.Services.AddSwaggerGen(c =>
{
    c.ExampleFilters();
});

builder.Services.AddSwaggerExamplesFromAssemblyOf<Program>();

需要创建实现IExamplesProvider<TRequestExample>的示例类:

public class ExampleRequestProvider : IExamplesProvider<ExampleInput>
{
    public ExampleInput GetExamples()
    {
        return new ExampleInput();
    }
}

public class ExampleInput
{
    public int ExampleValue { get; set; }
}

public class ActualInput
{
    public int ActualValue { get; set; }
}

最后,您需要将[SwaggerRequestExample]添加到端点:

[HttpPost]
[SwaggerRequestExample(typeof(ExampleInput), typeof(ExampleRequestProvider))]
public IActionResult Post([FromBody] ActualInput actualInput)
{
    return NoContent();
}

已成功测试ASP.NET Core 7.0,结果如下:

如果您遇到一些问题,也可以看看question

相关问题