WebAPIでは、リクエストボディ(HttpContent)は一度だけ読み取ることができ、キャッシュはできず、読み上げも順方向に行うのみです。
例えば:
1. リクエストアドレス: /?id=123&name=bob
サーバーサイドのメソッド:void Action(int id、文字列名) // すべてのパラメータは単純な型なので、すべてURLから出ます
2. リクエストアドレス: /?id=123&name=bob
サーバーサイドの方法:void Action([FromUri] int id, [FromUri] 文字列名) // 上記と同じです
void Action([FromBody] 文字列名); [FormBody]属性は、本体全体が引数として文字列として読み取られていることを示します
3. リクエストアドレス:/?id=123
クラスの定義:
パブリッククラス Customer { // 複雑なオブジェクトタイプが定義されています 公開文字列 名前 { get; セット; } public int 年齢 { get; セット; }
}
サーバーサイドのメソッド:void Action(int id, Customer c) // Parameter id はクエリ文字列から読み取る。パラメータ c は複雑な Customer オブジェクトクラスで、本文からフォーマッターまで読み取る
サーバーサイドの方法:void action(Customer c1, Customer c2) // エラー! 複数のパラメータは複素型であり、すべては一度しか読み取れないボディから読み取ろうとします
サーバー側の方法:void action([FromUri] Customer c1, Customer c2) // はい! 上記のアクションとは異なり、複素型C1はURLから読み込み、C2は本体から読み出されます
4. ModelBinderメソッド:
void Action([ModelBinder(MyCustomBinder)] SomeType c) // パラメータの解決に特定のモデルバインダーが使用されていることを示します
[ModelBinder(MyCustomBinder)] public class SomeType { } // このルールをすべてのSomeType型パラメータに適用してください。[ModelBidner(MyCustomBinder)] 属性を特定のSomeTypeに宣言することで
void Action(SomeType c) // c の型が SomeType であるため、SomeType の特性を適用してモデルのバインディングを決定します
概要:
1. デフォルトの単純なパラメータはURLパラメータに渡されますが、例外があります:
1.1 ルートにidパラメータが含まれている場合、idパラメータはルートを通過します。
1.2 パラメータが[FromBody]としてマークされている場合、そのパラメータは単純なパラメータで、クライアントはPOST: $.ajax(url, '=value')または$.ajax({url: url, data: {'': 'value'}})で渡すことができます。
2. デフォルトの複素パラメータ(カスタムエンティティクラス)はPOSTを通じて渡されますが、例外があります:
2.1 パラメータ値が[FromUri]とマークされている場合、そのパラメータは複素パラメータになり得ます。
3. [FromBody]とマークされたパラメータは一度だけ現れることができます[FromUri]とマークされたパラメータは複数回現れることがあり、[FromUri]とマークされたパラメータが単純なパラメータであれば、タグを削除できます。 |