私はいくつかのパラメータとクエリ内のDictionaryを受け付けるGETエンドポイントを持っています。ASP.Net Core Web API ModelStateは、DictionaryがFromQueryで使用されているときに無効化されます。
public IActionResult Get([FromQuery] RequiredFields required, [FromQuery] Dictionary<string, string> parameters)
必須フィールドは、必要な既知のフィールドの型付きクラスです。 "paramaters"は、RequiredFieldsの値に基づいてオプションで必要となるオプションのパラメータの辞書です。たとえば、RequiredFields.TypeがFooと等しい場合、パラメータには "x"と "y"キーが含まれている必要があります。
問題は、ModelState.IsValidはエラーなしで常にfalseです。 ModelState.Rootを検査するとき、未検証の子は、Dictionary内のRequiredFieldsオブジェクトに存在しないキーです。
これはバグですか、または辞書のキーと値のペアを手動で検証する必要がありますか?
私はいくつか試みました。
1)カスタムValidationAttributeを追加しようとしましたが、何らかの理由で呼び出されませんでした。
2)IsValidではなくModelState.ErrorCount> 0が使用されましたが、それはどちらかと思われません。
私はこれを試しましたが、Dictionaryにデシリアライズするパラメータクエリ文字列変数を渡すことができません。これはJSONデータを含むPOSTのように単純ですが、GETではカスタムのModelBinderを記述しない限り、サポートされていないようです。 –