Swashbuckle.AspNetCore [FromForm] IFormCollection

时间:2017-10-30 13:31:34

标签: 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尝试操作: Swagger UI

但Swagger UI使用body生成POST: formData = field1%3Dvalue1%26field2%3Dvalue2

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

所以问题是,它是OpenAPI的限制,还是SwaggerUI的错误?或者也许有办法达到我的期望?

1 个答案:

答案 0 :(得分:0)

IFormCollection是一个动态字典,所以Swagger不知道如何处理它,因为它实际上没有规则。这本身就足以告诉你,这不是你应该在基于REST的API中使用的东西。重点是使API自我记录,这意味着它应该接受它需要的实际内容作为强类型的参数,而不是通用的数据转储。

换句话说,做一些像:

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

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