2011-06-20 10 views
2

私は、ASP.NET MVCを使用してエンドポイントを設定しています。このMVPには、データ(基本的にはAPI)を操作および取得する要求を行うことができます。私は2足のOAuthモデルを使って、リクエストが秘密鍵と署名方法、そしてハイジャックを防ぐためのノンステーブルを使って署名されていることを検証しています。Model Bindingを使用して、HTTPリクエストシグネチャトークンとナンスを検証できますか?

ASP.NET MVCではモデルバインディングが便利なので、リクエストを消費するために活用しますが、署名検証とnonce/timestampの処理をモデルバインダーに焼き付けることができるのだろうかと思います。これは可能ですか?こうすることで、私が作成したさまざまなアクションで実装を再利用することができます。

答えて

1

私はあなたができるはずだと思います。

public class FooModelBinder : IModelBinder 
    { 
     public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
     { 
      FooModel fooModel = bindingContext.Model as fooModel; 
      if (fooModel != null) 
      { 
       // Do your verification stuff in here 
       // Updating any properties of your Model. 
       // Or you could retrieve something else entirely and return it if you like 
       // Let's pretend we just want to verify the model and set some property or other. 
       fooModel.NonceOkay = DoVerification(fooModel); 
       fooModel.NextAction = WorkOutWhereToGoNext(fooModel); 
       // or whatever 
      } 
      return fooModel; 
     } 
    } 

DoVerificationあなたModelBinderに住むことができるが、それはどこか別の場所に住んでいることは良いかもしれない:これを試してみてください。

次に、あなたのGlobal.asaxの中のApplication_Startでこれをスティック:

ModelBinders.Binders.Add(typeof(Foo), new FooModelBinder()); 
+0

感謝を。私はFooをアクションパラメータとして使用するときはいつでも、モデルバインダーをデフォルトにします。 – BigOmega

+0

はい、そうです。 –

+0

簡単な質問、あなたが私に示したコード内のポイント(if内)で、ヘッダ値や本文、コンテンツタイプなどのHTTPリクエスト値にどのようにアクセスすればよいですか? – BigOmega

関連する問題