0

我有一个 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 参数有效,但如果它是字符串则失败。有人可以解释一下吗?

4

1 回答 1

0

原来 uri 中的 %23 是问题所在。删除它使模型再次起作用。

于 2013-08-19T22:14:50.763 回答