问题
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
回答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