Asp.net core mvc Swashbuckle.AspNetCore[FromForm]IFormCollection

Asp.net core mvc Swashbuckle.AspNetCore[FromForm]IFormCollection,asp.net-core-mvc,swagger-ui,asp.net-core-2.0,Asp.net Core Mvc,Swagger Ui,Asp.net Core 2.0,我的.NET Core 2控制器中有以下操作。它是一个API,应该存储作为application/x-www-form-urlencoded发布的所有数据 [HttpPost("data/add/{formid}"] public void Add(int formid, [FromForm]IFormCollection formData) { //do something } 因此,Swagger UI允许使用UI尝试操作: 但是,大摇大摆的用户界面会生成带有正文的帖子:form

我的.NET Core 2控制器中有以下操作。它是一个API,应该存储作为application/x-www-form-urlencoded发布的所有数据

[HttpPost("data/add/{formid}"]
public void Add(int formid, [FromForm]IFormCollection formData) {
    //do something
}
因此,Swagger UI允许使用UI尝试操作:

但是,大摇大摆的用户界面会生成带有正文的帖子:formData=field1%3Dvalue1%26field2%3Dvalue2

我希望它是:field1=value1&field2=value2


所以问题是,这是OpenAPI的局限,还是虚张声势UI的缺陷?或者也许有办法得到我想要的

IFormCollection
是一个动态字典,因此斯威格不知道如何处理它,因为它实际上没有规则。这本身就足以向您发出信号,表明您不应该在基于REST的API中使用它。整个要点是使API自文档化,这意味着它应该接受它所需要的实际内容作为强类型参数,而不是一般的数据转储

换言之,应采取如下措施:

public void Add(int formid, [FromForm]DataClass data)

其中,
DataClass
是一个实际的类,其属性与要发布的字段名称匹配。使用强类型参数并不排除发布为
application/x-www-form-urlencoded
。真的没有充分的理由使用
IFormCollection

谢谢你的回复,克里斯。当然,我可以创建一个包含键/值集合的类,然后将其发布为application/x-www-form-urlencoded(REST实际上并不意味着应该使用application/json)。但简单地说,收集是从盒子里取出的东西,可以从盒子里取出