Я реализовал проект WebApi, в котором есть swashbuckle / swagger и пользовательский DelegatingHandler. Я добавил SwaggerAccessMessageHandler, чтобы проверить, сделан ли запрос swagger, и в этом случае я не хочу, чтобы мой пользовательский обработчик запускался.
Я зарегистрировал обработчик сообщений как
GlobalConfiguration.Configuration.MessageHandlers.Add(new SwaggerAccessMessageHandler());
с кастомной реализацией:
public class SwaggerAccessMessageHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (IsSwagger(request))
{
var response = request.CreateResponse(HttpStatusCode.Unauthorized);
return Task.FromResult(response);
}
else
{
return base.SendAsync(request, cancellationToken);
}
}
private bool IsSwagger(HttpRequestMessage request)
{
return request.RequestUri.PathAndQuery.StartsWith("/swagger");
}
}
Но когда я могу использовать WebApi с / swagger, я получаю пустую страницу вместо пользовательского интерфейса swagger.
ОБНОВЛЕНИЕ: Хорошо, я удалил обработчик Swagger. Я добавил новый AuthenticationHandler, который проверяет действительный ключ пользователя в строке запроса входящего запроса. Сейчас я не могу получить доступ к чванству. Есть ли способ обойти это, чтобы, когда я хочу получить доступ к swagger, мой пользовательский обработчик не вызывается?