3

複数の引数を持つアクションを持つApiControllerを想定します。

[HttpPost]
public void AddAddress( Person person, Address address, int simple )

またはそのようなもの。application/json今、私は次のようなコンテンツタイプとjsonで投稿リクエストを送信しようとしています:

{
  person: {...}, address: {..}, simple: 1
}

有効なjsonだと仮定してください;)

または次のようなjson配列で: [person, address, simple]

ただし、WebApiはこれを認識せず、アクションが見つからないことを通知します。これは、jsonリクエストで複数のパラメーターをサポートしていないためです。

HttpClientを使用してC#クライアントからこれを実行しており、jsonを使用して投稿リクエストを実行したいと思います。HttpClientにいくつかの便利な拡張機能を提供するWebApi.Clientパッケージを使用したかったのですが、ポータブルライブラリプロジェクト(webapiクライアントはサポートしていません)があります。

この機能をサポートするにはどうすればよいですか?

カスタムActionFilterを使用しようとしましたが、事前にアクションを見つけることができないため、実行されません。コンテキストと引数を知らないMediaTypeFormatterを試しました。また、ModelBinderも試しました。これも引数ごとにのみ表示され、常に実行されるとは限りません。

ありがとう!

4

1 に答える 1

4

フォーマッターを使用したASP.NETWebAPIに組み込まれているパラメーターバインディング戦略は、要求の本文にマップされた単一の複雑な引数のみをサポートします。あなたの場合、少なくとも2つの複雑な引数をマップしようとしています。このインフラストラクチャを拡張しない最も簡単な解決策は、これらの引数をプロパティとして含む新しいモデルクラスを作成することです。

public class AddressModel
{
  public Person Person { get; set; }
  public Address Address { get; set; }
  public int Simple { get; set; }
}

そして、そのモデルをコントローラーアクションで使用します

public void AddAddress( AddressModel model );
于 2012-11-01T15:25:08.340 に答える