2013-09-24 38 views
8

đang api Khách hàng của tôi gửi một thẻ xác thực trong chuỗi truy vấn như:Cách nhận giá trị Chuỗi truy vấn yêu cầu?

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

Tôi đang sử dụng MVC điều khiển Web api, và tôi có một bộ lọc để kiểm tra nếu auth_token là hợp lệ hay không, nhưng tôi không chắc chắn cách truy cập các giá trị chuỗi truy vấn yêu cầu.

Đây là những gì tôi đang làm bây giờ nhưng nó rõ ràng là sai:

Đoạn dưới đây là bên trong bộ lọc của tôi được thừa kế từ:

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 –

+0

@ muski nhưng tôi muốn làm điều này trong một bộ lọc, không phải ở cấp độ hành động. – loyalflow

Trả lời

4

Trong OnActionExecuting phương pháp của một bộ lọc, bạn có thể truy cập chuỗi truy vấn và phân tích cú pháp nó như thế này để nhận mã thông báo.

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

Nhưng sau đó, chuyển mã thông báo trong chuỗi truy vấn là một thực tiễn tốt? Có lẽ không, nhưng điều đó tùy thuộc vào bạn. Tiêu đề HTTP có thể là một lựa chọn tốt hơn vì chuỗi truy vấn có thể được ghi lại và lưu vào bộ nhớ cache.

22

Sử dụng phương pháp GetQueryNameValuePairs mở rộng, như vậy:

var queryString = actionContext.Request.GetQueryNameValuePairs().ToDictionary(x => x.Key, x => x.Value); 
Các vấn đề liên quan