如何在 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 如何避免在查询参数中泄露敏感数据