我正在使用.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
}
间断是一种声明,因为它工作了两次,而不是从那时起。
答案 0 :(得分:0)
好的我通过定义自己的类来保持这两个值,从而找到了解决这个问题的方法。
{{parentData}}
将控制器签名更改为:
public class FromLocation
{
[Required]
public string Location { get; set; }
[Required]
public int Attendees { get; set; }
}
现在黄色架构框列出了类型,我可以根据需要发送信息。不确定字典是怎么回事,但生活太短了。