3
我需要運行一個驗證例程,以查找有關服務器的每個請求的一些頭信息。我會在ASP.NET MVC中使用OnActionExecuting或ActionInvoker來運行每個請求,但我一直在尋找Web API,並沒有找到具體的東西。對每個請求執行代碼
如果同步和異步都可以實現,那將是最好的。
我需要運行一個驗證例程,以查找有關服務器的每個請求的一些頭信息。我會在ASP.NET MVC中使用OnActionExecuting或ActionInvoker來運行每個請求,但我一直在尋找Web API,並沒有找到具體的東西。對每個請求執行代碼
如果同步和異步都可以實現,那將是最好的。
對於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並驗證你需要的任何東西。
我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –
@JohnSaunders好的,謝謝。 –