2013-09-24 15 views
8

Benim API istemci kodu gibi sorgu dizesi içinde bir kimlik doğrulama kodu gönderir:Querystring değerleri istek nasıl alınır?

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

Ben Mvc Web API denetleyicisi kullanıyorum ve ben auth_token geçerli olup olmadığını kontrol eden bir filtre var, ama ben istek querystring değerlerine nasıl erişileceğinden emin değil.

Bu

şimdi ne yapıyorum ama açıkçası yanlıştır: OnActionExecuting yılında

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 ama bunu bir filtre içinde yapmak istiyorum, eylem seviyesinde değil. – loyalflow

cevap

4

:

aşağıda pasajı devralır benim filtrenin içinde olduğunu Bir süzgeç yöntemi, sorgu dizesine erişebilir ve belirteci almak için bunu bölebilir.

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

Ancak, sorgu dizesindeki bir belirteci iyi bir uygulama geçiriyor? Muhtemelen hayır, ama size kalmış. HTTP dizgisi sorgu dizesi günlüğe kaydedilip önbelleğe alınabildiğinden daha iyi bir seçenek olabilir.

22

kullanımı şöyle GetQueryNameValuePairs uzantısı yöntem:

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