2

私は Swagger を初めて使用します。Swagger を webapi に実装するためのオンライン ドキュメントをいくつか見て、SwaggerConfig のいくつかのプロパティを使用してカスタマイズしました。

これが私の要件です:- app.configキーと一致する必要がある「API_Key」TextBoxの値に基づいて、「Explore」ボタンをクリックしたときにのみswaggerドキュメントを表示する必要があります。

ここに画像の説明を入力

だから私はこのように実装することを見ています:-

  1. ユーザーが私の闊歩ホームページにアクセスすると、デフォルトでは、画像に示すようにヘッダーを除いて空のドキュメントが表示されます。
  2. ヘッダーにあるテキスト ボックスに API_Key を入力し、Explore をクリックします。
  3. 入力された API キーは、app.config または可能であれば SwaggerConfig のキーで検証されます。
  4. 検証された場合はドキュメントを表示し、そうでない場合はエラー メッセージを無効な API キーとして表示します。

提案が必要です。

敬具、ラグー

4

2 に答える 2

2

Web API のカスタム メッセージ ハンドラーを追加してから、ドキュメントに対して承認済みの要求を行うことができます。

    private const string swaggerApikey = "swagger-apiKey";

    private void Configuration([NotNull] IAppBuilder app)
    {
        var config = new HttpConfiguration();
        config.MessageHandlers.Add(new SwaggerMessageHandler());
        config
            .EnableSwagger(c =>
            {
                c.ApiKey(swaggerApikey)
                    .Description(swaggerApikey)
                    .Name(swaggerApikey)
                    .In("header");
            })
            .EnableSwaggerUi(c =>
            {
                c.EnableApiKeySupport(swaggerApikey, "header");
            });

        app.UseWebApi(config);
    }

    internal class SwaggerMessageHandler : DelegatingHandler
    {
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            if (request.RequestUri.LocalPath.Equals("/swagger/docs/v1"))
            {
                var apikey = request.Headers.FirstOrDefault(x => x.Key.Equals(swaggerApikey)).Value?.FirstOrDefault();
                if (!"secretApiKey".Equals(apikey))
                    return Task.FromResult(new HttpResponseMessage(HttpStatusCode.Forbidden));
            }
            return base.SendAsync(request, cancellationToken);
        }
    }
于 2017-04-19T09:24:55.553 に答える