在我的.NET核心2控制器中有以下操作。它是一个API,它应该存储所有以application/x-www-form-urlencoded方式发布的数据。
[HttpPost("data/add/{formid}"]
public void Add(int formid, [FromForm]IFormCollection formData) {
//do something
}因此Swagger允许使用UI:傲慢的用户界面尝试操作
但是Swagger会生成带有body的POST:formData=field1%3Dvalue1%26field2%3Dvalue2
我希望它是:field1=value1&field2=value2
所以问题是,它是OpenAPI的限制,还是SwaggerUI的缺陷?或者有办法得到我想要的?
发布于 2017-10-30 15:18:22
IFormCollection是一个动态字典,因此Swagger不知道如何处理它,因为它实际上没有规则。这本身就足以向您表明,这不是您应该在基于REST的API中使用的东西。关键是使API自文档化,这意味着它应该接受它所需要的实际内容为强类型的params,而不是一个通用的数据转储。
换句话说,可以这样做:
public void Add(int formid, [FromForm]DataClass data)其中DataClass是一个实际的类,其属性与您要发布的字段的名称相匹配。使用强类型的param并不排除将其作为application/x-www-form-urlencoded发布。使用IFormCollection实在没有什么好的理由。
https://stackoverflow.com/questions/47016560
复制相似问题