関連する質問: 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 を使用していることに注意してください。
手伝ってくれてありがとう!ほんとうにありがとう。
よろしく...
グーテンベルク