パラメータがモデルではなくメソッド引数として直接定義されている場合、IHttpActionResultの結果はリクエスト本文パラメータのバインドに失敗します

ハリー

引数としてGuidの配列をWebAPIアクションの結果に直接配置すると、リクエストの本文にあるGuidが見つからず、バインドされます。

[HttpPost]
public IHttpActionResult AddStores([FromBody]Guid[] Ids)
{
   ...            
}

idsはnullとして送信されますが、リクエスト本文にGUIDの配列としてidsを含めています。

モデル内にIDを配置した場合にのみ、モデルバインダーは実際にリクエスト本文でIDを検出します。

例えば

public class AddStoresRequest
{
    public Guid[] Ids { get; set; }
}


[HttpPost]
public IHttpActionResult AddStoreUser(AddStoresRequest request)
{
     ...            
}

この場合、IDは正しく検出されます。なぜこの異常が発生するのですか?メソッドパラメータでIDを引数として直接使用すると、モデルバインダーが失敗するのはなぜですか?

リクエストを作成するときにモデルを使用しません...リクエストの本文にIdsという配列を配置するだけです。

ギャレット

デフォルトでは、Guid [] IDがリクエストに追加されると、jsonシリアライザーはそれを次のようなものにマップします。

{
   "Ids":["58b84557-1899-4354-b5ac-1d97c2b95e1b", "db7106d7-ba8a-44cc-b34d-90bec9b2ca3f"]
}

そのため、2番目のアクションの実装を使用する必要があります。

最初の実装を使用する場合は、次のようなものを本文で送信する必要があります。

["58b84557-1899-4354-b5ac-1d97c2b95e1b", "db7106d7-ba8a-44cc-b34d-90bec9b2ca3f"]

これを実現するには、カスタムシリアル化またはJArrayを使用する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ