0

Swagger没有在 UI 和 JSON 中显示参数,即使我的方法有参数,当我添加[FromBody]标签时尤其会发生这种情况
swagger UI 无参数 JSON 文件无参数
操作方法:

    [HttpPost("Action")]
    public IActionResult Action([FromBody] string message)
    {
        return Ok(message);
    }

我使用带有 API 模板的全新 Asp.net core 3.12.2 Web 应用程序来测试它,我将其配置为与文档
ConfigureServices 完全相同:

services.AddMvc();

services.AddSwaggerGen(c =>
{
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
}

配置:

 app.UseSwagger();

   app.UseSwaggerUI(c =>
 {
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
 });

当我使用[FromRoute]&[FromHeader]等其他属性时,它确实有效......我查看了示例,并且 swagger 确实显示了来自 post 方法的参数


我也尝试过这样的对象:

    public class Message
{
    public int ID { get; set; }
    public string body { get; set; }
}

通过此操作:

 [HttpPost("Action")]
 public IActionResult Action([FromBody] Message message)
 {
    return Ok(message);
 }

相同的结果(无参数),但它确实显示了架构


那么我做错了什么?我怎样才能像示例一样记录帖子参数

4

2 回答 2

0

在使用 OpenAPI 3.0 时,您应该查看此代码示例:http ://petstore.swagger.io:8080/

OpenAPI 3.0 提供了requestBody描述请求体的关键字。它将有效负载与parameters(例如查询字符串和路径)区分开来。更灵活的requestBody是它允许您使用不同的媒体类型,例如 JSON、XML、表单数据、纯文本等,并为不同的媒体类型使用不同的模式:

https://swagger.io/docs/specification/describing-request-body/

这是默认 UI,如果您单击“试用”,示例值将自动填充请求正文区域以帮助创建测试请求正文。

于 2020-03-09T08:16:51.210 回答
0

我在 AspNetCore 5.0 上遇到了类似的问题,其中“复杂”类型将被完全忽略,无论是作为参数还是输出类型。问题是由于将输入/输出格式化程序切换到不同的 JSON 序列化程序(遗留代码,由于 newtonsoft 在某些情况下运行缓慢)引起的。新的 swashbuckle 可以与 System.Text.Json 或 Newtonsoft 一起使用,但不是第三种解决方案。因此,请检查 ConfigureServices 中的 .AddMvcOptions(),如果对 InputFormatters 或 OutputFormatters 做了任何事情,那可能是罪魁祸首

于 2021-10-13T08:08:09.083 回答