WebApi和使用Swagger

时间:2017-07-14 11:00:02

标签: c# swagger

我已经实现了一个具有swashbuckle / swagger和自定义DelegatingHandler的WebApi项目。 我添加了一个SwaggerAccessMessageHandler来检查是否发出了一个swagger请求,在这种情况下我不希望我的自定义处理程序运行。

我已将消息处理程序注册为

case .unrestricted = userInput.state

使用自定义实现:

GlobalConfiguration.Configuration.MessageHandlers.Add(new SwaggerAccessMessageHandler());

但是当我使用/ swagger进行WebApi时,我会得到一个空白页而不是swagger ui。

更新:好的我现在已经删除了Swagger处理程序。 我添加了一个新的AuthenticationHandler,它检查传入请求查询字符串中的有效userKey。我现在无法获得招摇。 有没有办法绕过这个,所以当我想访问swagger我的自定义处理程序没有被调用?

1 个答案:

答案 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的工作原理:
enter image description here

您可能会注意到,您无法控制管道以绕过任何消息处理程序。 在您的AuthenticationHandler中,您必须检查PathAndQuery是否包含swagger只执行以下内容

base.SendAsync(request, cancellationToken);