2013-09-24 12 views
8

マイAPIクライアントのコードは次のようにクエリ文字列に認証トークンを送信します。要求文字列値を取得するには?

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

私はMVCのWeb APIコントローラを使用している、と私は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

@私はフィルターではなく、アクションレベルでこれをやりたい – 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); 
関連する問題