Web API Documentation using swagger

ⅰ亾dé卋堺 提交于 2019-12-02 07:34:39

问题


I am new to swagger, I have seen couple of online documentation to implement Swagger to my webapi and used some of the properties of SwaggerConfig to customize.

Here is my requirement :- I need to show swagger documentation only on "Explore" button click based on the value of "API_Key" TextBox which should match with my app.config key.

So I am seeing to implement like this:-

  1. User comes to my swagger home page, by default it will have empty documentation, except the header as shown in the image.
  2. Enters API_Key in the textbox provided in the header and click on Explore.
  3. Entered API key is validated with the key in my app.config or if possible in the SwaggerConfig.
  4. If validated show documentation else show error message as invalid API key.

Need suggestions.

Kind Regards, Raghu


回答1:


Simply edit the index.html and add the headers you need on the addApiKeyAuthorization change event. See more here:

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




回答2:


You may add custom message handler for web api and then make authorized requests to documentation:

    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);
        }
    }


来源:https://stackoverflow.com/questions/32252510/web-api-documentation-using-swagger

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!