我有一个C#ASP.NET WebAPI应用程序,其中包含使用Swashbuckle自动生成的API文档.我希望能够从文档中省略某些方法,但我似乎无法弄清楚如何告诉Swagger不要将它们包含在Swagger UI输出中.
我觉得它与添加模型或模式过滤器有关,但它不明显该做什么,文档似乎只提供了如何修改方法的输出的示例,而不是从输出中完全删除它.
提前致谢.
所以,我开始使用Swagger.我完全爱上它的功能,但我对所有公开方法的可用性有所怀疑.
据我所知 - Swaschbuclke中包含的所有"auth"方法实际上都是关于API本身,但我不需要帮助 - 我的所有API都受API id /密钥对的保护.
我想以某种方式利用ASP.NET身份(登录系统)来限制对API页面的访问(/ swagger/ui/index).
有什么办法吗?Swaschbuckle中的任何方法?任何路线/身份黑客?
任何帮助表示赞赏.
编辑1:[ApiExplorerSettings(IgnoreApi = true)]属性不是我正在寻找的 - 它限制了对方法的所有访问,无论身份如何.
我正在寻找一种方法,以可配置的方式使用SwashBuckle在Swagger文档中显示/隐藏WebAPI路由.添加[ApiExplorerSettings(IgnoreApi = true)]确实会隐藏路由,但每次我想要更改时我都需要重新编译.
我已经研究过创建一个IOperationFilter使用我定义的自定义属性的方法.这样我可以用a装饰路线[SwaggerTag("MobileOnly")]并检查web.config或其他东西,看看是否应该显示路线.属性定义如下:
public class SwaggerTagAttribute : Attribute
{
public string[] Tags { get; private set; }
public SwaggerTagAttribute(params string[] tags)
{
this.Tags = tags;
}
}
Run Code Online (Sandbox Code Playgroud)
所述IOperationFilter检测所述属性被定义并且IDocumentFilter去除的路径在这里被定义:
public class RemoveTaggedOperationsFilter : IOperationFilter, IDocumentFilter
{
private List<string> TagsToHide;
public RemoveTaggedOperationsFilter()
{
TagsToHide = ConfigurationManager.AppSettings["TagsToHide"].Split(',').ToList();
}
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
var tags = apiDescription.ActionDescriptor
.GetCustomAttributes<SwaggerTagAttribute>()
.Select(t => t.Tags)
.FirstOrDefault();
if (tags != null && TagsToHide.Intersect(tags).Any()) …Run Code Online (Sandbox Code Playgroud)