この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 27609|答える: 3

[WebAPI] WebAPIはリクエストの内容に複数のパラメータ(SBおよびSB1)をバインドすることはできません

[リンクをコピー]
掲載地 2016/08/16 13:52:38 | | | |



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]とマークされたパラメータが単純なパラメータであれば、タグを削除できます。




先の:.NET Oracleのマルチテーブルクエリメソッド、馬鹿げたメソッドです。
次に:C#はリフレクションを使ってプロパティが割り当てられているかどうかを判断します
掲載地 2016/08/16 15:21:29 |
ModelBinderにはModelBinderAttribute用のフィーチャークラスがあるはずです

フィルターに似ています
掲載地 2016/08/16 15:21:44 |
毎日遊びに来てください
掲載地 2016/08/16 15:22:00 |
名声をくれ
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com