API パラメータの読み取りに使用されるモデルを無視する API コマンドの奇妙なケースがあります。これがコマンドとモデルです。
[HttpGet]
public HttpResponseMessage Debates(string tag, [FromUri]GetDebatesModel model)
{
if (!ModelState.IsValid)
{
return CreateResponse(HttpStatusCode.BadRequest, ModelState);
}
return Request.CreateResponse(HttpStatusCode.OK, model.Fields);
}
モデル:
public class GetDebatesModel
{
public GetDebatesModel()
{
Fields = "(default)";
}
public string Fields{ get; set; }
}
コマンドをこの関数にマップする WebApiConfig は次のとおりです。
config.Routes.MapHttpRoute(
name: "contentNestedControllers",
routeTemplate: "content/{controller}/{tag}/{action}",
defaults: new { }
);
/content/hashtag/%23MinimumWage/Debates を実行すると、予想されるデフォルト値の「(デフォルト)」が提供されるだけです。これは、モデルを認識してインスタンス化することを意味します。
/content/hashtag/%23MinimumWage/Debates?fields=someRandomnessHere を実行すると、最初から fields パラメータを含めなかった場合と同じ結果が得られます。
興味深いことに、フィールド パラメータは、タグ パラメータを int に変更すると機能しますが、文字列の場合は失敗します。誰もこれを説明できますか?