から複合型への結合は、このような形式である必要があります:ASP.net WEBAPIパラメータ私は、.NET 4.5</p> <p>URLのASP.net WEBAPIを使用してRESTのWebサービスを作成したいURI
/values?Age=55&Height=176&Race=1&Weight=80&Gender=male&id=800001
人口は基本的に特定のプロパティを持つだけDTOあるカスタムオブジェクトである
[HttpGet]
public string Get(int id, [FromUri]Demographics demographics)
{ // etc.}
:関連するコントローラは、次のようになります。 しかし、それはカスタム列挙型のタイプがあるつのプロパティが含まれます。
enum Gender
{
Female = 0,
Male
}
URLは、上記の形式であれば、デフォルトのマッピングが正常に動作しますが。 しかしもちろん、URLで提供されるパラメータが正しいかどうかを確認する必要もあります。
ASP.net WebApi(afaik)per defaultは、想定されている型に基づいて(またはその型に変換可能な場合)各パラメータをマップしようとします。 URI内で一致する値が見つからない場合は、それはただ0とみなされます。
ここで、0は定義上、Gender Demographics.Genderの有効な値であるという非常に不幸な状況になります〜Gender.Female)。
もっとも簡単な解決策は、0が「確認できない」状態になるように列挙を変更することです。しかし、私はenumを変更することはできません。 私はDemographicsオブジェクトのために私自身のオーバーロードを作成することができましたが、むしろこれをやりません。なぜなら、より良い方法が必要だと思うからです。
genderパラメータをURI内のパラメータに明示的にバインドし、送信されなかった場合は例外をスローすることはできますか?
私はタイプコンバータについて読んだことがありますが、私はURI文字列を処理しなければならないと思います.WebApiが明らかに既に持っている多くの機能を実装する必要があると思います。
URIで作業する必要があり、リクエストボディを使用できないことに注意してください。