2012-10-17 117 views
3

我需要運行一個驗證例程,以查找有關服務器的每個請求的一些頭信息。我會在ASP.NET MVC中使用OnActionExecuting或ActionInvoker來運行每個請求,但我一直在尋找Web API,並沒有找到具體的東西。對每個請求執行代碼

如果同步和異步都可以實現,那將是最好的。

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+0

@JohnSaunders好的,謝謝。 –

回答

8

對於Web API,你應該訴諸MessageHandlers

消息處理程序總是先運行,管道中的任何事情之前,他們也能夠運行最後一個(以後的Web API返回的響應,只是之前的響應達到客戶端)。

關於消息處理程序的更多信息可以在這裏找到 - http://www.asp.net/web-api/overview/working-with-http/http-message-handlers

這裏是一個簡單的例子,驗證API密鑰:

public class WebApiKeyHandler : DelegatingHandler 
{ 
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     string apikey = HttpUtility.ParseQueryString(request.RequestUri.Query).Get("apikey"); 
     if (apikey != "something") 
     { 
      HttpResponseMessage response = request.CreateErrorResponse(HttpStatusCode.Forbidden, "You can't use the API without the key."); 
      throw new HttpResponseException(response); 
     } 
     else 
     { 
      return base.SendAsync(request, cancellationToken); 
     } 
    } 
} 

在這個例子只能用鑰匙「東西」要求:即/API /價值/ apikey =東西將被允許,所有其他人將被拒絕。

在你的情況下,你可以簡單地訪問request.Headers並驗證你需要的任何東西。