如何在 C# Rest API 中处理查询参数中的可选 ENUM - 无效和空值以及在 Swagger 中隐藏特定值

Posted

技术标签:

【中文标题】如何在 C# Rest API 中处理查询参数中的可选 ENUM - 无效和空值以及在 Swagger 中隐藏特定值【英文标题】:How to handle Optional ENUM in Query Parameter in C# Rest API - Invalid and null value and also hide specific value in Swagger 【发布时间】:2020-05-02 08:04:01 【问题描述】:

我正在开发一个 Web API (.NET Framewrok) - 我想在查询参数中使用 ENUM。

我想将其保留为可选参数,如果提供,则该值与定义的值匹配,那就没问题了。否则它应该采用我将指定的任何默认值。

但问题是 - 我保持这样的定义:

public HttpResponseMessage Application(UserType? user = null)

因此,这样做 - 它是可选参数,但每当我不传递任何内容或传递无效值时,它总是采用 null 并且如果我像这样将其保持为公开状态:

public HttpResponseMessage Application(UserType? user = UserType.INVALID)

那么它总是采用 INVALID(如果提供的值无效或为空)。

由于默认行为,上述情况很好。

但我希望每当提供无效值时,它都应该采用 INVALID,并且我想从 Swagger 下拉菜单中隐藏此值。如果什么都没有提供,那么它应该是空的。但据我所知,只有一种情况是可能的。 因此,如果有任何技巧可以处理这两种情况,请建议并建议如何从 Swagger UI 中隐藏 INVALID - ENUM 值。

【问题讨论】:

【参考方案1】:

您可以使用HttpResponseMessage Application(UserType? user)。那么枚举值无效的情况会被当作BadRequest处理,不传递任何东西都会被当作null处理。

【讨论】:

是的,你是对的。但是我的条件很少(关于 body 参数和查询参数),因为我必须执行某些操作,然后我必须调用我的数据库/系统。 在 body 参数上你没有问题,因为 swagger 不提供默认值。对于查询参数,我想不出任何解决方案,也许您需要重新考虑您的实现。 是的,最后一个选择是改变我想要实现我的功能的方式。但只是为了提供信息,我想告诉你我已经实现的功能。正文中有一个字段和此查询参数,如果查询参数为空并且正文中的字段等于 A(示例),那么我需要执行某些操作并且如果查询参数是无效值(需要从 swagger UI 中隐藏 - 这个INVALID (ENUM value)) 并且 body 中的字段是 B 然后我需要执行另一个操作。

以上是关于如何在 C# Rest API 中处理查询参数中的可选 ENUM - 无效和空值以及在 Swagger 中隐藏特定值的主要内容,如果未能解决你的问题,请参考以下文章

C# 转换中的 HttpURLConnection REST API

REST API 最佳实践:查询字符串中的参数与请求正文中的参数

Salesforce REST API 如何避免在查询参数中泄露敏感数据

无法为 rest api 手动设置查询参数(使用 mux)

Rest API Post Json 使用带有两个参数的 C#

REST API 设计中的高级分页、排序和过滤