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:-
- User comes to my swagger home page, by default it will have empty documentation, except the header as shown in the image.
- Enters API_Key in the textbox provided in the header and click on Explore.
- Entered API key is validated with the key in my app.config or if possible in the SwaggerConfig.
- If validated show documentation else show error message as invalid API key.
Need suggestions.
Kind Regards,
Raghu
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
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);
}
}