2013-09-24 40 views
8

我的API客戶端代碼發送認證令牌的查詢字符串,如:如何獲取請求查詢字符串值?

www.example.com/api/user/get/123?auth_token=ABC123 

我使用的MVC Web API控制器,和我有一個過濾器來檢查,如果該AUTH_TOKEN是有效還是無效,但我不知道如何訪問請求查詢字符串值。

這就是我現在所做的,但它顯然是錯誤的:

以下代碼段是我的過濾器,繼承了從內部:

ActionFilterAttribute

public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext) 
{ 
     base.OnActionExecuting(actionContext); 

     if (actionContext.Request.Properties.ContainsKey("auth_token") && 
      actionContext.Request.Properties["auth_token"].ToString() == "ABC123") 
     { 
     ... 
     } 
} 
+0

http://stackoverflow.com/questions/12101508/accessing-the-query-string-in-asp-net-web-api – 2013-09-24 14:04:24

+0

@穆斯基,但我想在過濾器中做到這一點,而不是在行動層面。 – loyalflow

回答

4

OnActionExecuting過濾器的方法,您可以訪問查詢字符串並像這樣解析它以獲取令牌。

var queryString = actionContext.Request.RequestUri.Query; 
if(!String.IsNullOrWhiteSpace(queryString)) 
{ 
    string token = HttpUtility.ParseQueryString(
         queryString.Substring(1))["auth_token"]; 
} 

但是,然後,傳遞一個令牌查詢字符串一個很好的做法?可能不會,但這取決於你。 HTTP頭可能是一個更好的選擇,因爲查詢字符串可以被記錄和緩存。

22

使用GetQueryNameValuePairs擴展方法,像這樣:

var queryString = actionContext.Request.GetQueryNameValuePairs().ToDictionary(x => x.Key, x => x.Value);