我已经实现了一个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");
}
}
但是,当我使用 /swagger 访问我的 WebApi 时,我得到的是一个空白页面而不是 Swagger UI。
更新:好吧,我现在已经删除了 Swagger 处理程序。 我添加了一个新的身份验证处理程序,它检查传入请求查询字符串中的有效 userKey。现在我无法访问 Swagger。 有没有办法绕过这个问题,使得当我想要访问 Swagger 时,我的自定义处理程序不会被调用?