1

私はこのように宣言したメソッドを実装する必要があります:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = @"whatever")]
void MyMethod(InputContainer input);

ここで、InputContainerは:として宣言されていDataContractます

[DataContract(Namespace = "whatever")]
public class InputContainer : IExtensibleDataObject
{
    //[DataMember]s inside
}

これで、私のコードには、呼び出しがマップされるアクションがあります。

[HttpPost]
ActionResult MyMethod()
{
    // How do I get the InputContainer object here?
}

ReadAsAsync()避けたいもう1つのアセンブリへの依存関係であるを使用しているサンプルのみを見てきました。とにかくReadAsAsync()、私が複製できるいくつかのヘルパーメソッドだと思います。

DataContract-attributedオブジェクトをMVC3アクションに変換するにはどうすればよいPOSTですか?

4

1 に答える 1

0

これはそのままでは機能しません。InputContainertype のパラメーターをアクションに追加すると、デフォルトで初期化され、POST 本文の値は無視されます。

ここからの追加配線が必要です。IModelBinder最初に、HTTP リクエストにアクセスしInputStream、オブジェクトを でデシリアライズする の実装が必要ですDataContractSerializer。次に、上記の実装をその実装から返すサブクラスCustomModelBinderAttributeが必要です。というふりをしましょう。これがすべて完了したら、必要なのはパラメーターに属性を追加することだけです。IModelBinderGetBinder()MagicAttribute

[HttpPost]
ActionResult MyMethod([Magic] InputContainer input)
{
}
于 2013-03-21T08:49:22.990 に答える