2

Web API がメッセージ本文から引数リストに値をマップすることは可能ですか? たとえば、これがあった場合:

public HttpResponseMessage Post(int id, string value1, string value2) {}

これの代わりに:

public HttpResponseMessage Post(MyCustomClass message) {}

私はフィドラー経由で JSON を投稿していましたが、後者しか機能しませんでした。私は後者の方がずっと好きですが、最初の例を機能させることができるかどうかに興味がありました。クエリ文字列パラメーターを使用して動作させることはできましたが、フォームの値または json を投稿することはできませんでした。ちょっと興味があるんだけど。

4

1 に答える 1

0

いいえ、できません。Mike Stallは、これを詳細に説明する素晴らしい投稿をしています。

つまり、MVC ではモデル バインダーしかなく、リクエスト ボディ全体がバッファリングされ、バインダーに渡されました。

Web API には、モデル バインダーとフォーマッターの両方があります。

経験則として、Web API はモデル バインダーを使用してクエリ文字列パラメーターを読み取り、フォーマッターを使用して本文を読み取ります。また、リクエストの本文はバッファリングされません。これは、読み取り専用で一方向の非同期ストリームです。したがって、本体から読み取ることができるものは 1 つだけです。それが単純な型 (文字列、int) であるか複雑な型であるかは関係ありません。

于 2012-07-27T14:03:53.350 に答える