带有 ModelBinder 的 Swashbuckle 和 Web Api 方法
Swashbuckle and Web Api method with ModelBinder
我有一个 C# WebAPI 项目,其方法使用自定义 ModelBinder 作为其输入参数。当我查看 Swashbuckle 生成的 Swagger UI 时,方法参数的所有属性都单独列出,而不是只有一个 "body" 参数。如果我去掉 [ModelBinder] 属性并切换到使用 [FromBody] 属性,Swagger UI 会显示正确的内容。我必须使用 [ModelBinder] 属性,因此无法将其关闭。
有没有办法让 Swashbuckle 生成“[FromBody] 属性样式”单个参数而不是它正在执行的多个参数?
Ondrej 是对的。只需链接它们:
IHttpActionResult Foo([FromBody][ModelBinder]SomeModel model)
要补充一点,对于 Swashbuckle,属性的顺序很重要:
IActionResult Foo([FromBody, ModelBinder(typeof(SomeModelBinder))]SomeModel model)
将在 requestBody 中使用 SomeModel ref 生成正确的 OpenApi 模式。
但是
IActionResult Foo([ModelBinder(typeof(SomeModelBinder)), FromBody]SomeModel model)
将生成一个将 SomeModel 定义为查询参数的 OpenApi 架构
我有一个 C# WebAPI 项目,其方法使用自定义 ModelBinder 作为其输入参数。当我查看 Swashbuckle 生成的 Swagger UI 时,方法参数的所有属性都单独列出,而不是只有一个 "body" 参数。如果我去掉 [ModelBinder] 属性并切换到使用 [FromBody] 属性,Swagger UI 会显示正确的内容。我必须使用 [ModelBinder] 属性,因此无法将其关闭。
有没有办法让 Swashbuckle 生成“[FromBody] 属性样式”单个参数而不是它正在执行的多个参数?
Ondrej 是对的。只需链接它们:
IHttpActionResult Foo([FromBody][ModelBinder]SomeModel model)
要补充一点,对于 Swashbuckle,属性的顺序很重要:
IActionResult Foo([FromBody, ModelBinder(typeof(SomeModelBinder))]SomeModel model)
将在 requestBody 中使用 SomeModel ref 生成正确的 OpenApi 模式。
但是
IActionResult Foo([ModelBinder(typeof(SomeModelBinder)), FromBody]SomeModel model)
将生成一个将 SomeModel 定义为查询参数的 OpenApi 架构