9

関連する質問: Web API アクション パラメーターが断続的に nullになり、http://social.msdn.microsoft.com/Forums/vstudio/en-US/25753b53-95b3-4252-b034-7e086341ad20/web-api-action-parameter-is -断続的に-null

やあ!

ASP.Net MVC WebAPI 4 で ActionFilterAttribute を作成しているので、次のコードとして実行する前にトークンの検証が必要なコントローラーのアクション メソッドに属性を適用できます。

public class TokenValidationAttribute : ActionFilterAttribute
{
        public override void OnActionExecuting(HttpActionContext filterContext)
        {
        //Tried this way
        var result = string.Empty;
        filterContext.Request.Content.ReadAsStringAsync().ContinueWith((r)=> content = r.Result);

        //And this
        var result = filterContext.Request.Content.ReadAsStringAsync().Result;

        //And this
        var bytes = await request.Content.ReadAsByteArrayAsync().Result;
        var str = System.Text.Encoding.UTF8.GetString(bytes);

        //omit the other code that use this string below here for simplicity
    }
}

コンテンツを文字列として読み取ろうとしています。このコードに記載されている 3 つの方法を試してみましたが、すべて空が返されました。WebApi では、リクエストのボディ コンテンツを 1 回しか読み取れないことを知っているので、コード内の他のすべてにコメントを付けて、実行して結果が得られるかどうかを確認しようとしています。ポイントは、クライアントと Fiddler でさえ、要求のコンテンツ長の 315 を報告することです。サーバーのコンテンツ ヘッダーにも同じサイズが取得されますが、コンテンツを読み取ろうとすると空になります。

属性を削除して同じリクエストを行うと、コントローラーが適切に呼び出され、Json の逆シリアル化が問題なく行われます。属性を入れると、コンテンツから空の文字列が得られます。それは常に起こります。関連する質問が述べているように、断続的ではありません。

私は何を間違っていますか?選択したアクションのみが実行前にトークンの検証を必要とするため、DelegatingHandler の代わりに ActionFilter を使用していることに注意してください。

手伝ってくれてありがとう!ほんとうにありがとう。

よろしく...

グーテンベルク

4

1 に答える 1