我有一个 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 参数一样。
有趣的是,如果我将 tag 参数更改为 int,则 fields 参数有效,但如果它是字符串则失败。有人可以解释一下吗?