2017-07-14 92 views
2

我已經實現了一個具有swashbuckle/swagger和自定義DelegatingHandler的WebApi項目。 我已經添加了一個SwaggerAccessMessageHandler來檢查是否在這種情況下,我不希望我的自定義處理程序運行時發出了一個Swagger請求。WebApi和使用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用/招搖,我得到了一個空白頁面,而不是招搖的UI。

更新:好的我現在已經刪除了Swagger處理程序。 我添加了一個新的AuthenticationHandler,它在傳入的請求查詢字符串中檢查有效的userKey。我現在無法訪問招搖。 有沒有辦法解決這個問題,所以當我想訪問大舉的我的自定義處理程序不被調用?

+0

請參閱更新以上。 – wakthar

回答

1

因爲您使用的是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管道工程:
enter image description here

正如你可能會注意到,你必須通過管道無法控制繞過任何消息處理程序。 在你的AuthenticationHandler,你必須檢查,如果你PathAndQuery包含招搖只是執行以下

base.SendAsync(request, cancellationToken);