2016-05-26 56 views
1

我有一個WebAPI服務使用ADFS(對於問題不重要,但它是Microsoft的Active Directory身份驗證服務)。C#WebAPI頂部消息處理

用戶向服務器發送請求,並且由於未經過身份驗證,他將被重定向到ADFS的登錄頁面。下次他向服務器發送一個請求時,他會發送一個驗證cookie,這將允許他跳過ADFS登錄頁面。

服務正在被不同的域(CORS)訪問,但我已經解決了這個問題。 GET請求很容易處理。

我的問題是OPTIONS請求,因爲我的服務是在不同的域上,然後是網站的域名。 OPTIONS請求在每個POST請求之前發送。所有OPTIONS請求都不包含cookie,因此請求被重定向到ADFS登錄頁面。

我想創建一個甚至在ADFS之前執行的消息處理程序,就像一個消息處理程序,它將成爲第一個將運行消息的代碼,以便檢查請求的方法是否爲OPTIONS(in這種情況下,我會簡單地返回響應)

我試圖用我的消息中找到一個例子處理,但它正在太晚執行時,ADFS」消息處理程序是它上面

public class MessageHandler2 : DelegatingHandler 
{ 
    protected override Task<HttpResponseMessage> SendAsync(
     HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     // Create the response. 
     var response = new HttpResponseMessage(HttpStatusCode.OK) 
     { 
      Content = new StringContent("Hello!") 
     }; 

     // Note: TaskCompletionSource creates a task that does not contain a delegate. 
     var tsc = new TaskCompletionSource<HttpResponseMessage>(); 
     tsc.SetResult(response); // Also sets the task state to "RanToCompletion" 
     return tsc.Task; 
    } 
} 

有誰知道路怎麼我是否可以儘可能高地處理消息?也許即使沒有消息處理程序

+0

看看這個教程關於委託處理程序http://www.asp.net/web-api/overview/advanced/http-message-handlers – Nkosi

回答

0

如果你看看下面的教程...

HTTP Message Handlers in ASP.NET Web API

你會看到...

消息處理程序被稱爲以相同的順序它們出現在 MessageHandlers集合中。因爲它們是嵌套的,所以響應 消息沿另一個方向傳播。也就是說,最後一個處理程序是 第一個得到響應消息。

您需要確保您在ADFS之前註冊您的處理程序。看看你的設置爲您的網頁API

+0

好吧,怎麼做我讓它成爲第一個處理程序?在Application_Start階段,根本沒有消息處理程序 –