2

我是 swagger 的新手,我已经看过几个在线文档来实现 Swagger 到我的 webapi 并使用 SwaggerConfig 的一些属性进行自定义。

这是我的要求:-我只需要根据“API_Key”文本框的值在“探索”按钮单击时显示 swagger 文档,该值应与我的 app.config 键匹配。

在此处输入图像描述

所以我看到这样实现: -

  1. 用户来到我的招摇主页,默认情况下它将有空文档,除了如图所示的标题。
  2. 在标题中提供的文本框中输入 API_Key,然后单击浏览。
  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 回答
2

只需在更改事件中编辑index.html并添加您需要的标题。addApiKeyAuthorization在这里查看更多:

https://github.com/swagger-api/swagger-ui#header-parameters

于 2015-08-28T02:34:55.433 回答