swagger中如何隐藏某些接⼝
本⽂涉及技术栈:(⾮ core)。提前告知是便于⼤家鉴别这篇⽂章是否符合⾃⼰想要的,好多博客不分和 core,会导致⼀些⼩⽩发现有的代码拿过去根本就运⾏不通。如果阅读者是别的语⾔,或者觉得⽆参考意义也可以移步他处,以此节省您的时间。
以下开始正⽂:
写过webapi的⼤多⽤过swagger来⽣成在线⽂档,⽅便调⽤接⼝⼈员的查阅和调试。这⾥就不介绍如何使⽤了,底部链接会给出参考资料,帮助您从零开始搭建swagger⽂档。
⽂档⽣成了,但是由于某些原因,我并不想让我写的某个接⼝显⽰在⽂档⾥,即这个接⼝不想暴露给别⼈,这个可以是我私下⾃⼰测试,或者别的什么接⼝,反正就不想显⽰出来,出于这个考虑,我了很多资料,最后得出⽅案如下:
第⼀步,新建过滤器:
using Swashbuckle.Swagger;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http.Description;
namespace Apps.WebApi.Core
{
/// <summary>
/// 隐藏接⼝,不⽣成到swagger⽂档展⽰
/// </summary>她组词有哪些
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]
public partial class HiddenApiAttribute : Attribute { }
/// <summary>
///
/// </summary>
public class SwaggerIgnoreFilter : IDocumentFilter
{
/// <summary>
/// 重写Apply⽅法,移除隐藏接⼝的⽣成
/// </summary>
/// <param name="swaggerDoc">swagger⽂档⽂件</param>
科学家的小故事/// <param name="schemaRegistry"></param>
/
// <param name="apiExplorer">api接⼝集合</param>
public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
{
foreach (ApiDescription apiDescription in apiExplorer.ApiDescriptions)
{
if (Enumerable.OfType<HiddenApiAttribute>(apiDescription.GetControllerAndActionAttributes<HiddenApiAttribute>()).Any())
{
string key = "/" + apiDescription.RelativePath;
if (key.Contains("?"))
{
int idx = key.IndexOf("?", StringComparison.Ordinal);
key = key.Substring(0, idx);
}
swaggerDoc.paths.Remove(key);
沈阳旅游景点}
}
}
}
}
View Code
第⼆步,swagger的配置⽂件中注⼊过滤器:
using System.Web.Http;
using Swashbuckle.Application;
using System.Web;
using Apps.WebApi;
using Apps.WebApi.Core;
[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]
国际音标学习软件namespace Apps.WebApi
{
/// <summary>
///
香水品牌排名/// </summary>
public class SwaggerConfig
{
/// <summary>
///
/// </summary>
public static void Register()
{
var thisAssembly = typeof(SwaggerConfig).Assembly;
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
c.SingleApiVersion("v1", "Apps.WebApi");
c.IncludeXmlComments(string.Format("{0}/bin/l", System.AppDomain.CurrentDomain.BaseDirectory));
//在接⼝类、⽅法标记属性 [HiddenApi],可以阻⽌【Swagger⽂档】⽣成
c.DocumentFilter<SwaggerIgnoreFilter>();
})
.EnableSwaggerUi(c =>
程前近况{
});
}
}
}
View Code
第三步,api带上过滤器属性:
以上,最后⽣成的⽂档就不会显⽰加了过滤属性的接⼝了。
参考资料:
1. (PS:这篇⽂章是帮助您搭建swagger⽂档,⾥⾯关于的代码好像有点⼩问题,所以我没搞。⼀般开发也看得懂,如果需要+参考这篇⽂章也遇到代码错误的,需要另寻⽅法实现)
2. (本⽂代码基本就是照抄的该⽂章,只不过是我这⾥附带了⼀下图⽚,阅读性会更好)
发布评论