2017-02-14 10 views
2

ウェブAPIのリクエストを使用してポストフォームのパラメータ値を読み取るにはどうすればよいですか?私はAuthenticateAsync機能にポストパラメータをチェックしたい別々Web API、C#のアクションフィルタでポストフォームのパラメータ値を取得するにはどうすればよいですか?

public class AuthenticationAttribute : Attribute, IAuthenticationFilter 
{ 


    public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken) 
    { 
    // I want to read the post paramter values over here 
    } 

    public Task ChallengeAsync(HttpAuthenticationChallengeContext context, CancellationToken cancellationToken) 
    { 
     return Task.Run(
      () => 
       { 

       }); 
    } 

    public AuthenticationAttribute() 
    { 

    } 
} 

AuthenticationAttributeクラスを定義しているコントローラ

[Route("")] 
    [HttpPost] 
    [AuthenticationAttribute] 
    public void PostQuery() 
    { 
      //some code 
    } 

を持っています。

私は

context.Request.Content.ReadAsStringAsync().Result; 

をやってみましたが、この文字列は空です。私は

context.Request.GetQueryNameValuePairs(); 

を使用してクエリパラメータを読み取ることができています。しかし、ポストフォームパラメータを取得する方法を見つけることができませんでした。どんな助けもありがとうございます。

+0

なぜAuthenticationAttributeからリクエストの本文にアクセスしたいのですか?副作用として、Task.Run()を避けることをお勧めします。 –

答えて

0

私はcontext.Request.GetQueryNameValuePairs()に精通していないですが、それは、クエリ文字列からのparamsを抽出しますように名前から、それが聞こえます。 POSTを実行しているので、クエリ文字列にはパラメータがありません(POST本体にあります)。これらの使用は、あなたのモデルとプロバイダを実装しているかに依存します

context.Controller.ValueProvider.GetValue("groupId").AttemptedValue 

context.HttpContext.Request.Params["groupId"] 

またはこの:

はこれを試してみてください。

0

使用

context.ActionContext.ActionArguments 

これはあなたを取得するキーは、引数の名前で、値は引数そのものですDictionary<string, object>

これは、アクションメソッドは、モデルへの着信POST値をバインドするバインディングモデルを使用している前提としています。

関連する問題