当前位置: 首页 > 知识库问答 >
问题:

虚张声势。AspNetCore[表单]IFormCollection

贺亦
2023-03-14

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

[HttpPost("data/add/{formid}"]
public void Add(int formid, [FromForm]IFormCollection formData) {
    //do something
}

所以斯瓦格UI允许使用UI尝试这个动作:斯瓦格UI

但是SwaggerUI生成带有正文的POST:formData=field 1=value e1&field 2=value e2

我希望它是:field1=value1

所以问题是,这是OpenAPI的限制,还是SwaggerUI的错误?或者也许有一种方法可以得到我所期望的?

共有1个答案

贺高杰
2023-03-14

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

换言之,请执行以下操作:

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

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

 类似资料:
  • null 另外,作为API开发人员,如果我不使用它,我会失去什么?

  • 我正在ASP中使用Swashback 5。NET webapi项目,具有所有默认设置。它序列化方法的输出,以便向我显示应答的模式。我得到的文档如下所示: 这是由以下C#代码生成的 结果在哪里。结果基本上是一个标准的对象列表,每个对象都包含这些键/值/id字段。我在这里读过https://conficient.wordpress.com/2014/05/22/getting-rid-of-k__ba

  • 在我的“简化”API中,所有响应都是从基本“响应”类派生(继承)的。响应类由一个填充元数据的头和一个包含用户请求的核心数据的主体组成。响应(在JSON中)的布局使得所有元数据都在第一个“层”上,而主体是一个称为“主体”的单一属性 我试图用以下JSON来定义这种关系: 然后,我尝试通过创建从body/header继承的各种body/header类来创建不同的响应,然后创建由相关的header/bod

  • 我想使用Swashuckle(swagger for. net)在WebAPI项目上进行基于API密钥的身份验证。 我已经配置了如下虚张声势: (见 https://github.com/domaindrivendev/Swashbuckle#describing-securityauthorization-schemes) 它似乎创建了我所期望的swagger文件: 但是当我进入UI并‘尝试’时

  • 我正在为我的spring boot项目使用swagger注释。 我想为控制器的每个资源返回一个公共响应代码契约。 在文件中:https://github.com/swagger-api/swagger-core/wiki/annotations#apiresponses-apiresponse他们谈论@ApiResponses,但我不能将注释放在类级别。 以下是我所做的: 但问题是和中的坏东西从未

  • 嗯,我在API文档中使用了Swagger,它在本地主机中工作得很好,当我将它托管在IIS上时,问题就开始了。对于somereason来说,它不再起作用了 本地主机: 我的控制器代码只有这个方法: