Swagger没有正确定义参数

时间:2018-01-31 10:40:34

标签: .net-core swagger swagger-ui

我正在使用.netcore创建一个简单的REST API,并使用了swashbuckle包(swashbuckle.aspnetcore \ 1.1.0),以便我可以轻松地进行测试。

ConfigureServices:

services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info
            {
                Title = "Meetings Calculator API",
                Version = "v1",
                Description = "An API to provide pricing information related to journeys",
            });
        });

配置

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

除了我开发的一个电话后,一切都很顺利。似乎我已经定义为在正文中传递的字典没有正确地提供给服务。

方法签名

[HttpPost("CalculateCost", Name = "CalculateCost")]
public IActionResult getJourneyCalculation([FromBody] IDictionary<String, String> locations)

生成json配置

"parameters":[  
     {  
        "name":"locations",
        "in":"body",
        "required":false,
        "schema":{  
           "type":"object",
           "additionalProperties":{  
              "type":"string"
           }
        }
     }
  ],

我认为这是字典应该是这样的点,所以我认为配置方面不能正常工作。有没有人知道我需要做什么才能让它正确地拿起IDictionary?

我遇到了一个帖子,讨论过这个帖子,说明在拼写错误中存在一个错误(或者至少是不一致)导致问题“s”v“S”在字符串中但是我已经尝试了两个没有改变。我认为这也是旧的,引用为固定的。我也尝试了一些改变UseSwaggerUI端点的建议,但对我来说只是给我一个空白的屏幕。

[UPDATE] 我似乎只从字典中获取一个条目,例如,如果我使用intput:

{
    "2":"London",
    "2":"Bristol",
    "2":"London",
    "2":"Newcastle"
}

最后一个条目将进入控制器。

[UPDATE] 我试过了它,它将间歇性地工作:

 with arguments ([""]) - ModelState is Invalid

 with arguments (["System.Collections.Generic.Dictionary`2[System.String,System.Int32]"]) - ModelState is Valid

使用相同的输入:

{
    "London":2,
    "Bristol:2",
    "London:2",
    "Newcastle":2
}

间断是一种声明,因为它工作了两次,而不是从那时起。

1 个答案:

答案 0 :(得分:0)

好的我通过定义自己的类来保持这两个值,从而找到了解决这个问题的方法。

{{parentData}}

将控制器签名更改为:

public class FromLocation
{
    [Required]
    public string Location { get; set; }
    [Required]
    public int Attendees { get; set; }
}

现在黄色架构框列出了类型,我可以根据需要发送信息。不确定字典是怎么回事,但生活太短了。