首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swashbuckle.AspNetCore [FromForm]IFormCollection

Swashbuckle.AspNetCore [FromForm]IFormCollection
EN

Stack Overflow用户
提问于 2017-10-30 13:31:33
回答 1查看 1.4K关注 0票数 1

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

代码语言:javascript
复制
[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的缺陷?或者有办法得到我想要的?

EN

回答 1

Stack Overflow用户

发布于 2017-10-30 15:18:22

IFormCollection是一个动态字典,因此Swagger不知道如何处理它,因为它实际上没有规则。这本身就足以向您表明,这不是您应该在基于REST的API中使用的东西。关键是使API自文档化,这意味着它应该接受它所需要的实际内容为强类型的params,而不是一个通用的数据转储。

换句话说,可以这样做:

代码语言:javascript
复制
public void Add(int formid, [FromForm]DataClass data)

其中DataClass是一个实际的类,其属性与您要发布的字段的名称相匹配。使用强类型的param并不排除将其作为application/x-www-form-urlencoded发布。使用IFormCollection实在没有什么好的理由。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47016560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档