动态忽略控制器上的 WebAPI 方法以获取 API 资源管理器文档

本文关键字:获取 API 资源管理器 文档 方法 WebAPI 控制器 动态 | 更新日期: 2023-09-27 18:37:28

我们已经实现了一个webAPI,并且我们有许多API控制器。我们为 API 提供了一个 API 文档,我们想要做的是从文档中排除某些 Web 方法,但我们希望根据我们运行的环境动态完成此操作。只是为了让您理解我的意思,假设我有以下网络方法

[ApiExplorerSettings(IgnoreApi = true)] 
public Product getProduct()
{
   ...
}

通过将 ApiExplorerSettingAttribute 上的 IgnoreAPI 属性设置为 true,它会从文档中排除我们想要的 Web 方法,但我们需要一种动态设置"true"值的方法。理想情况下,我们希望有一个数据库表,其中包含每个webMethod的布尔值,并基于这些值设置IgnoreAPi属性的值。有没有办法实现这一目标?您的帮助将不胜感激。

动态忽略控制器上的 WebAPI 方法以获取 API 资源管理器文档

可以实现自定义IApiExplorer并将其注册到 Web API 的服务中,以便完全控制列出或不列出哪些 API。

这是实现大部分内容的开发人员的博客文章: https://learn.microsoft.com/en-us/archive/blogs/yaohuang1/asp-net-web-api-introducing-iapiexplorerapiexplorer

这是IApiExplorer接口定义:http://msdn.microsoft.com/en-us/library/system.web.http.description.iapiexplorer(v=vs.118).aspx

您可以做的一件事是从现有ApiExplorer实现派生(或重用现有源代码)并调用base以获取默认列表,然后根据需要进一步筛选它。

根据s_hewitt的评论,建议是:

从ApiExplorer派生,实现ShouldExploreAction和ShouldExploreController两种方法是要走的路。使用这两种方法进行数据库调用,根据路由、控制器和操作进行查找。

我对 WebAPI 的文档生成了解不多,但我知道属性。属性被编译到代码中,并导致硬编码值直接保存在 EXE 或 DLL 中的数据中。它们无法更改。

话虽如此,您可以在正常编译后将属性作为第二个集合应用。也许PostSharp可以在这里提供帮助?也许更改解决方案配置可能是指示要为其构建的环境以及此方法获得 IgnoreApi 处理的一种方式。您可以创建自己的属性以应用于描述应在哪些环境中忽略该方法的方法。(我认为,如果您不尝试调用数据库来获取这些数据,那么您更有可能在PostSharp中做您想做的事情。