Asp.Netコア2.xおよび3.xが闊歩APIコントローラコントローラのアクションメソッド隠され、隠されたパケット群を使用しWEBAPIし、

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> (); 
          }); 
          ... 
      }
      コードをコピー
    • 例:
      私は領事ハートビート・インターフェース検査車を提供するためにここにいます

      しかし、それはインターフェースの文書に表示されませんでした

       

おすすめ

転載: www.cnblogs.com/webenh/p/11605718.html