我已经实现了一个具有swashbuckle / swagger和自定义DelegatingHandler的WebApi项目。 我添加了一个SwaggerAccessMessageHandler来检查是否发出了一个swagger请求,在这种情况下我不希望我的自定义处理程序运行。
我已将消息处理程序注册为
case .unrestricted = userInput.state
使用自定义实现:
GlobalConfiguration.Configuration.MessageHandlers.Add(new SwaggerAccessMessageHandler());
但是当我使用/ swagger进行WebApi时,我会得到一个空白页而不是swagger ui。
更新:好的我现在已经删除了Swagger处理程序。 我添加了一个新的AuthenticationHandler,它检查传入请求查询字符串中的有效userKey。我现在无法获得招摇。 有没有办法绕过这个,所以当我想访问swagger我的自定义处理程序没有被调用?
答案 0 :(得分:2)
您有一个空白页面,因为您正在使用REST服务,并且您没有在正文中说任何内容。您的浏览器将返回标题401,该标题对用户不可见。 您必须更改对以下内容的响应
var response = request.CreateResponse(HttpStatusCode.Unauthorized,"You are not authorized");
<强>更新强>
UPDATE: Ok I have removed the Swagger handler for now. I have added a new AuthenticationHandler which checks for a valid userKey in the incoming request querystring. I cannot access swagger now. Is there a way around this so when I want to access swagger my custom handler is not called?
没有DelegatingHanlers作为入口点执行。
遵循webapi Pipeline的工作原理:
您可能会注意到,您无法控制管道以绕过任何消息处理程序。
在您的AuthenticationHandler中,您必须检查PathAndQuery
是否包含swagger只执行以下内容
base.SendAsync(request, cancellationToken);