And*_*vey 13 c# wcf-web-api asp.net-web-api
给定ASP.NET Web API路由:
example/{Id}
其映射到以下ApiController操作方法:
public void Example(Model m)
{
    ...
}
模型类定义为:
public class Model
{
    public int Id { get; set; }
    public string Name { get; set; }
}
当我张贴JSON { "Name": "Testing" }的URL /example/123,然后Id将财产Model对象未绑定.它保持为0而不是123.
如何使模型绑定还包括路径数据中的值?我不想为看似常见的用例编写自定义模型绑定器.任何想法将不胜感激.谢谢!
Tro*_*ord 10
完成所需内容的最简单方法是向方法中添加另一个参数,并指定哪个参数来自请求的哪个部分.
例:
[HttpPost]
public void Example([FromUri]int id, [FromBody]Model m) {
    // ...
}
现在你的路由/examples/{id}将能够成功绑定 - 因为该Example方法有一个id在URI中寻找的参数.要填充模型,您也可以在其中传递ID,或执行以下操作:
[HttpPost]
public void Example([FromUri]int id, [FromBody]Model m) {
    m.Id = id; // Make sure the model gets the ID as well.
}
然后,只需在发布{ "Name": "Testing" }到/example/123你上面提到.
小智 5
我们内置的ModelBinding基础结构不支持URI和body的对象的部分绑定.但是,您可以实现自定义IActionValueBinder来完成此任务.例如,请参阅博客文章http://blogs.msdn.com/b/jmstall/archive/2012/04/18/mvc-style-parameter-binding-for-webapi.aspx.
建议的流程通常是发布到/example而不是/example/{id}. (尽管他们通常使用 Web API /api/{controller})
查看本页中间的表格:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
另请检查“使用 ASP.NET Web API 插入记录”上的链接 - http://stephenwalther.com/archive/2012/03/05/introduction-to-the-asp-net-web-api.aspx