WebAPIによって自動的にシリアル化されるオブジェクトがありますが、データにコンテキストを提供するためにオブジェクトをラップしたいと思いました。例は次のとおりです。
public class SecureModel<T>
{
public string Info { get; set; }
public T Data { get; set; }
}
これにより、JSONリクエストで問題なくシリアル化/逆シリアル化でき、すべて問題ありません。ただし、リクエストの実行を終了する前に、その情報の一部を確認したいので、POSTのパラメーターを取得する場所にActionFilterを追加しました。
public class MyAuth : System.Web.Http.Filters.ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var arg = actionContext.ActionArguments.FirstOrDefault().Value;
// arg: get the Info?
// if the info isn't correct, return a specific Response.
}
}
引数を調べると、まさにそれが必要ですが、実際のジェネリック型を指定せずに、SecureModelに弱く型付けする方法を理解することはできません。これをSecureModel<object>にケースに入れて、ルートに適切にアクセスできるはずですが、それは許可されていません。これまでのところ、使用する必要のあるデータのみを取得できます。
var notStrongEnough = arg.GetType().GetProperty("Info");
ただし、これにはReflectionを使用したくないので、答えがないまま前進するのに苦労しています。この状況での私の代替案は、データを文字列に変更し、JSONオブジェクトを手動でシリアル化/逆シリアル化することですが、MVC3でWebAPIを使用する目的の一部が無効になります。
注: 基本クラスとしてSecureModelを使用するように設計を変更すると、データに対して実行しているハッシュの一部に課題が追加されるため、そのパスをたどらないようにします。
ありがとう!
編集:誤ったタイトル。