2013-09-24 5 views
8

मेरे API क्लाइंट कोड की तरह क्वेरी स्ट्रिंग में एक प्रमाणीकरण टोकन भेजता है:अनुरोध क्वेरीस्ट्रिंग मान कैसे प्राप्त करें?

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

मैं MVC वेब एपीआई नियंत्रक उपयोग कर रहा हूँ, और मैं एक फिल्टर अगर auth_token वैध है या नहीं की जाँच करता है कि है, लेकिन मैं कर रहा हूँ सुनिश्चित नहीं है कि अनुरोध क्वेरीस्ट्रिंग मानों का उपयोग कैसे करें।

यह अब मैं क्या कर रहा हूँ है, लेकिन यह स्पष्ट रूप से गलत है: OnActionExecuting में

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 लेकिन मैं इसे एक फिल्टर में करना चाहता हूं, कार्रवाई स्तर पर नहीं। – loyalflow

उत्तर

4

:

नीचे टुकड़ा मेरी फिल्टर है कि विरासत में से के अंदर है फ़िल्टर की विधि, आप क्वेरी स्ट्रिंग तक पहुंच सकते हैं और टोकन प्राप्त करने के लिए इसे इस तरह पार्स कर सकते हैं।

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); 
संबंधित मुद्दे