使用swagger的Web API文档

时间:2015-08-27 14:44:00

标签: c# .net swagger-ui swagger-2.0 swashbuckle

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

这是我的要求: - 我只需要在"探索"按钮点击基于" API_Key"的值TextBox应与我的app.config键匹配。

enter image description here

所以我看到这样实现: -

  1. 用户来到我的招摇主页,默认情况下它会有空的文档,除了图像中显示的标题。
  2. 在标题中提供的文本框中输入API_Key,然后单击“浏览”。
  3. 使用我的app.config中的密钥验证输入的API密钥,或者如果可能,在SwaggerConfig中验证。
  4. 如果经过验证,则show documentation会将错误消息显示为无效的API密钥。
  5. 需要建议。

    亲切的问候, Raghu

2 个答案:

答案 0 :(得分:2)

只需修改index.html,然后在addApiKeyAuthorization更改事件中添加所需的标题即可。点击此处了解更多信息:

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

答案 1 :(得分:1)

您可以为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);
        }
    }