当前位置: 首页 > 知识库问答 >
问题:

Swagger显示没有参数到具有参数的控制器操作

阎咏思
2023-03-14

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

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

我使用全新的 Asp.net 核心3.1和2.2 Web应用程序与API模板来测试这一点,我完全按照文档配置
服务进行了配置:

services.AddMvc();

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

配置:< br >

 app.UseSwagger();

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

当我使用[FromRoute]等其他属性时,它确实起作用

我还尝试了这样的物体:

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

通过此操作:

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

相同的结果(没有参数),但它确实显示了模式

那么我做错了什么呢?如何像示例一样记录帖子参数

共有2个答案

杨君之
2023-03-14

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

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

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

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

章飞章
2023-03-14

我在 AspNetCore 5.0 上遇到了类似的问题,其中“复杂”类型将作为参数和输出类型被完全忽略。该问题是由于将输入/输出格式化程序切换到不同的JSON序列化程序(遗留代码,因为netonsoft在某些情况下速度很慢)引起的。新的虚张声势可以与系统.Text.Json或牛顿软件一起使用,但不能用于第三种解决方案。所以检查.AddMvcOptions() 在配置服务中,如果对输入格式化程序或输出格式化程序执行了任何操作,则可能是罪魁祸首

 类似资料:
  • 我有Spring acpect,它会在我的应用程序中的每个控制器方法周围触发。在方面的主体中,我想访问方法签名中声明的所有请求参数。有没有一种简单的方法可以避免反思?

  • 我正在尝试使用$http访问Web API get控制器。按如下方式进行角度应用: 在我的例子中,PrimaryID或AlternateID都具有该值。因此,其中一个将始终为空。 我的Web api方法是 当其中一个值为 null 时,$http.get 生成的 url 如下所示: 或者 这不符合我的Web API方法。 但是,如果我使用 它工作了。我可以在我的参数中将值硬编码为null,但是我想

  • 在一个基于NodeJS的项目中,loopback-component-explorer(2.7.0)附带的Swagger没有显示HTML页面中的“参数”,我们可以在其中为Restendpoint提供所需的params,而不管http动词(例如GET、POST和PATCH等)。必须remoteMethod(...)定义遵循一些大摇大摆的要求吗? 谢了。

  • 导致问题的两个endpoint位于根路径上,并且URL中只有一个path参数。它们都在一个具有@requestmapping(“/”)的控制器中,并对它们进行注释; 这两个endpoint工作正常,只是在Swagger呈现HTML时引起了一些问题。如果我删除它们,将显示HTML。我已经尝试将它们自己移动到控制器中,看看是否可以阻止swagger在swagger配置中访问它们。但是,它们似乎只需要存

  • 在Spring MVC中, 当返回值包含重定向前缀时,viewResolver将其识别为需要重定向的特殊指示。视图名称的其余部分将被视为重定向URL。客户端将向该重定向URL发送一个新请求。 我们可以编写如下处理程序方法来处理重定向: 现在我们可以像这样在中访问这个重定向属性 通常我们可以在方法中访问这个重定向属性,但是当我在返回语句中指定一个URL作为参数化url时,如下所示 我无法访问重定向属

  • 我找不到为什么Swagger没有显示带有文本区域“body”的POSTendpoint,以便我可以将JSON粘贴到其中。 我本以为会看到这样的页面,在PetStore中大摇大摆地发布 但我的表格只是在我点击“试用”后发布的 你能帮我一下吗? 专家 配置 } 应用程序 } 促销SwaggerBundle } 终点,终点