基本的にヘッダーで指定されたAPIバージョンに基づいてコントローラーを呼び出すWebAPIでいくつかのバージョニング手法を使用しています。したがって、シナリオでは、api / GetSalesHistoryというエントリポイントがありますが、サーバー担当者(私)は、必要な処理を実行するために要求コントラクトを変更する必要がありました。場合によっては、これが重大な変更(新しい必須フィールド、またはリストに変更された単一の値など)になるため、バージョン管理が行われます。
したがって、ルーティングセレクターはヘッダーでAPIバージョンを探してから、正しいコントローラーを呼び出します。バージョン1コントローラーにはバージョン1要求のパラメーター・タイプがあり、バージョン2コントローラーにはバージョン2要求のパラメーター・タイプがあります。
ここに問題があります。箱から出して、コントローラーは送信するペイロードに関係なく実行されます。WCFに戻ると、間違ったオブジェクトを送信すると、シリアル化が失敗し、要求全体が失敗します。現在、バージョン1のペイロードをバージョン2のコントローラーに送信すると、シリアル化に失敗したり、リクエストに失敗したりする代わりに、空のフィールドを持つバージョン2のリクエストのインスタンスが作成され、実行が継続されます。したがって、パラメータはnullとして入力されないため、if(request == null)explode;と単純に言うことはできません。
期待されるペイロードが受信されない場合、コントローラーに要求を拒否させるにはどうすればよいですか?