我有一个控制器方法:
/// <summary>
/// Test api
/// </summary>
/// <param name="fromForm">from form</param>
/// <returns>result</returns>
[HttpPost("test")]
public string Test([FromForm] string fromForm)
{
return "result";
}
然后我使用 Swashbuckle 作为 swagger UI,但是 swagger UI 中没有显示“来自表单”的描述,我在 Swashbuckle 版本 5.5 和 6.1 之间切换,但结果仍然相同,
删除FromForm时描述正确显示,我尝试使用SwaggerRequestBody注释,还在Startup.cs中添加了InclusionXmlComment,并在csproj中添加了GenerateDocumentationFile 也一样,但还是没有运气
编辑:这是我从 swagger.json 得到的结果,注意到参数位于“requestBody”而不是“parameters”中,
"requestBody": {
"content": {
"multipart/form-data": {
"schema": {
"type": "object",
"properties": {
"fromForm": {
"type": "string"
},
}
},
"encoding": {
"fromForm": {
"style": "form"
}
}
}
}
},
编辑2: 我浏览了 OpenApi 代码,发现使用 FromForm 时,我的参数位于 RequestBody 属性内,类型为 OpenApiEncoding。不使用FromForm时,参数位于OpenApiParameter类型的Parameters属性内,并且没有代码在OpenApiEncoding中编写描述
我的快速而肮脏的解决方案是添加一个
SwaggerSchema
属性。缺点是文档不是最漂亮的(没有描述标题等),但它确实出现了。
public string Test([FromForm, SwaggerSchema("from form description")] string fromForm)