2013-09-24 3 views
8

Моего апи код клиента посылает маркер аутентификации в строке запроса, как:Как получить значения запроса Querystring?

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

Я использую MVC контроллер Web API, и у меня есть фильтр, который проверяет, если auth_token является действительным или нет, но я не знаете, как получить доступ к значениям запроса querystring.

Это то, что я делаю сейчас, но это явно не так:

Ниже фрагмент кода находится внутри моего фильтра, который наследуется от:

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

В 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); 
Смежные вопросы