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

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

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

通过将ApiExplorerSettingAttribute上的IgnoreAPI属性设置为true,它会从文档中排除Web方法,这是我们想要的,但我们需要一种动态设置“true”值的方法。 理想情况下,我们希望为每个webMethod创建一个包含bool值的数据库表,并根据这些值设置IgnoreAPi属性的值。 有没有办法实现这个目标? 非常感谢您的帮助。

您可以实现自定义IApiExplorer并在Web API的服务中注册它,以完全控制列出或未列出的API。

这是来自开发人员的博客文章,其实现了大部分内容: http : //blogs.msdn.com/b/yaohuang1/archive/2012/05/13/asp-net-web-api-introducing-iapiexplorer-apiexplorer.aspx

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

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

根据s_hewitt的评论,建议是:

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

我对WebAPI的文档生成知之甚少,但我确实知道属性。 属性被编译到代码中并导致硬编码值直接保存在EXE或DLL中的数据中。 它们无法改变。

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