C# .NET 仅针对特定 api 控制器或模块(项目)内的 api 控制器启用 Swagger UI

C# .NET Enable Swagger UI only for specific api controller or for api controllers within module (project)

是否有任何方法可以配置 Swagger,以便它只为解决方案中的某个 API 控制器或属于属于的一组 API 控制器生成 UI 和文档特定模块(带解决方案的项目)?

我的解决方案包含 50 多个项目,其中几个包含许多 API 控制器,但我只需要为其中一个位于特定项目中的控制器启用 Swagger。

我知道 [ApiExplorerSettings(IgnoreApi = true)] 属性,但这样我就需要将此属性设置到我不需要的所有 API 控制器,我只想标记特定的 API 我想在上面使用 swagger 的控制器。

有什么办法吗?

您可以在注册控制器时使用约定。

如果你创建一个新的 IActionModelConvention,像这样:

public class WhitelistControllersConvention : IActionModelConvention
{
    public void Apply(ActionModel action)
    {
        if (action.Controller.ControllerName == "Item")
        {
            action.ApiExplorer.IsVisible = true;
        }
        else
        {
            action.ApiExplorer.IsVisible = false;
        }
    }
}

然后在Startup中配置swagger时使用:

services.AddControllers(c =>
{
    c.Conventions.Add(new WhitelistControllersConvention());
});

然后您可以控制包含哪些控制器。在我的示例中,我只是根据名称进行操作(仅包括 ItemController),但您可以更改它以标识您想要的控制器,但是您想要这样做。