1はじめに
なぜ我々は、インタフェースの一部を非表示にする必要がありますか?
、私たちが闊歩とのインタフェースを交換するとき、必然的にいくつかの直感的なインタフェースは、このような私たちは領事とを併用する場合、ヘルスチェックは、アラームインターフェイスと通知インタフェースさらされるように、公開されますので、これらのインターフェイス時々便宜上、私たちは非表示にするインターフェイスする必要がある。この時間は暗号化されていない、唯一の内部開発者が知っています。
なぜパケット?
我々は独立したフロントとプロジェクトの後端を書くとき通常は、必然的に、あなたがサービス・インターフェースであるインターフェースのフレームワークである理解する必要がある場合に、インターフェイスが数百に達したときにフロントページ用のインターフェイスを書くの多くが呼び出されswaggerUIため、この時間が発生しますインターフェイスのグループ化は良い選択です。
闊歩の基本的な使用は、ここではそれらを繰り返すことはしません、あなたが読むことができる、Microsoftの公式ドキュメントを、あなたは基本的に使用することができます
2は、swaggerUI認証要求が追加されました
- 新しい フィルタのHttpHeaderOperationFilter操作、継承された Swashbuckle.AspNetCore.SwaggerGen.IOperationFilterインタフェース、 メソッドを適用します
/// <要約> ///闊歩请求头 /// </要約> パブリッククラスHttpHeaderOperationFilter:IOperationFilter { 公共ボイドは、適用(操作オペレーション、OperationFilterContextコンテキスト) { #regionの新の方法 (operation.Parametersは== NULL)であれば { operation.Parameters =新しいリスト<IParameter>(); } (context.ApiDescription.TryGetMethodInfo()METHODINFO METHODINFOアウト)なら 、{ もし(!methodInfo.CustomAttributes.Any(T => t.AttributeType == typeof演算(AllowAnonymousAttribute)) &&!(methodInfo.ReflectedType.CustomAttributes.Any(T = > t.AttributeType == typeof演算(AuthorizeAttribute)))) { operation.Parameters.Add(新しいNonBodyParameter { NAME = "許可"、 Inが= "ヘッダ"、 タイプ= "string"は、 必須=真、 "XXXベアラ为格式请输入トークン、"説明= })。 } } #endregion #region已过时 //場合(operation.Parameters == NULL) // { // operation.Parameters =新しいリスト<IParameter>(); //} // VAR actionAttrs = context.ApiDescription.ActionAttributes()ToListメソッド()。 // VARのisAuthorized = actionAttrs.Any(A => a.GetType()== typeof演算(AuthorizeAttribute))。 //(のisAuthorized == false)の場合は //必要=真、 {// //するvar controllerAttrs =のcontext.ApiDescription.ControllerAttributes(); //のisAuthorized = controllerAttrs.Any(A => a.GetType()== typeof演算(AuthorizeAttribute))。 //} // VAR isAllowAnonymous = actionAttrs.Any(A => a.GetType()== typeof演算(AllowAnonymousAttribute))。 //もし(のisAuthorized && isAllowAnonymous ==偽) // { // operation.Parameters.Add(新しいNonBodyParameter // { //名前= "許可" = "ヘッダ"で// // TYPE = "string"は、 //説明= "请输入トークン、为XXXベアラ格式" //})。 } }
- その後、変更 にStartup.csを 当社のカスタム追加、ConfigureServices方法 HttpHeaderOperationFilterフィルタを
公共IServiceProvider ConfigureServices(IServiceCollectionサービス) { ... services.AddSwaggerGen(C => { ... c.OperationFilter <HttpHeaderOperationFilter> (); }); ... }
我々はswaggerUIを訪問します。この時間は、トークンを入力することができます
3、APIのグループ
- 変更 にStartup.csを より闊歩文書を追加し、ConfigureServices方法
公共IServiceProvider ConfigureServices(IServiceCollectionサービス) { ... services.AddSwaggerGen(C => { c.SwaggerDoc( " V1 "、新情報 { バージョン= " V1 "、 タイトルは= "接口文档"、 説明=「接口文档-基础" TermsOfService = ""、 連絡=新しい連絡先 { NAME = "XXX1111"、 電子メール= "[email protected]"、 URLは= "" } }); c.SwaggerDoc("V2」、新情報 { =バージョン" V2 "、 タイトル= "インターフェイスのドキュメント"、 説明= "ドキュメントインターフェイス-基本"、 termsOfService = ""、 名刺=新しい新しいビジネスカード { NAME = "XXX2222"、 電子メール= "[email protected]"、 のURL = "" } }); //反射注射すべてのアセンブリが記載 GetAllAssembliesを()ここで(T => t.CodeBase.EndsWith( "Controller.dll"))ToListメソッド()のForEach(アセンブリ=> .. { c.IncludeXmlComments (assembly.CodeBase.Replace( "DLL"、 ".xmlファイル")); }); c.OperationFilter <HttpHeaderOperationFilter>(); //c.DocumentFilter <HiddenApiFilter>(); }); ... }
- 修正 Startup.cs 設定方法、追加されました
公共の設定(アプリケーションIApplicationBuilder、ILoggerFactory LoggerFactory)を無効 { ... app.UseSwagger(); app.UseSwaggerUI(C => { c.SwaggerEndpoint( "/ SWAGGER / V2の /swagger.json"、 "ドキュメントインターフェイス-基本") ; //サービス・インターフェース文書は、最初に表示 c.SwaggerEndpoint( "/ SWAGGER / V1 /swagger.json"、 "インターフェースのドキュメント-ビジネスを"); //は後ろに置く基本的なインターフェイスのドキュメントを示し c.RoutePrefix = String.Emptyをし; //インターフェース文書に直接入力を設定した後であってもよいIP }); ... }
-
そしてまた、私たちコントローラバージョン闊歩文書のトップマーク
今回はグループショーにドキュメントをインターフェースすることができるようになります
4、API隠し
- カスタム隠された特性を作成 HiddenApiAttribute.cs
/// <要約> ///隐藏闊歩接口特性标识 /// </要約> [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] パブリッククラスHiddenApiAttribute:System.Attribute { }
- APIを隠すフィルタの作成 継承HiddenApiFilter Swashbuckle.AspNetCore.SwaggerGen.IDocumentFilterインタフェースを、 メソッドを適用します
/// <要約> ///自定义闊歩隐藏过滤器 /// </要約> パブリッククラスHiddenApiFilter:IDocumentFilter { 公共ボイドは、適用(SwaggerDocumentのswaggerDoc、DocumentFilterContextコンテキスト) { foreachの(context.ApiDescriptionsでApiDescriptionのapiDescription) { もし(apiDescription.TryGetMethodInfo(アウトMETHODINFO法)) { IF(method.ReflectedType.CustomAttributes.Any(T => t.AttributeType == typeof演算(HiddenApiAttribute)) || method.CustomAttributes.Any(T => t.AttributeType == typeof演算(HiddenApiAttribute))) { 文字列キー= "/" + apiDescription.RelativePath。 IF(key.Contains() "?") { INT IDX = key.IndexOf(System.StringComparison.Ordinal "?")。 キー= key.Substring(0、IDX)。 } swaggerDoc.Paths.Remove(キー)。 } } } } }
- 中 での使用のStartup.cs HiddenApiFilter
公共IServiceProvider ConfigureServices(IServiceCollectionサービス) { ... services.AddSwaggerGen(C => { c.SwaggerDoc( "V1"、新情報 { バージョン= "V1"、 タイトルは= "接口文档"、 説明=「接口文档-基础」 TermsOfService = ""、 連絡=新しい連絡先 { NAME = "XXX1111"、 電子メール= "[email protected]" のURL = "" } }); c.SwaggerDoc( "V2"、新しい情報 { バージョン= "V2"、 タイトル=「インターフェイスのドキュメント」 説明= "接口文档-基础"、 TermsOfService = ""、 連絡=新しい連絡先 { NAME = "XXX2222"、 電子メール= "[email protected]" のURL = "" } })。 //反射注入全部程序集说明 GetAllAssemblies()。ここで、(トン=> t.CodeBase.EndsWith( "Controller.dll") &&!t.CodeBase.Contains( "Common.Controller.dll"))。ToListメソッド() .ForEach(アセンブリ=> { c.IncludeXmlComments(assembly.CodeBase.Replace( ".xmlファイル")) "DLL"; }); c.OperationFilter < HttpHeaderOperationFilter>(); c.DocumentFilter <HiddenApiFilter> (); }); ... }
- 例:
私は領事ハートビート・インターフェース検査車を提供するためにここにいます
しかし、それはインターフェースの文書に表示されませんでした