【发布时间】:2013-05-25 08:26:03
【问题描述】:
我在一个未更改的 MVC4 Web API 项目中有一个简单的 ASP.Net Web API 控制器,它有一个采用 Values 类的 POST 方法。当我做一个:
POST /api/values 正文为 { name: "somename" }
调用 Values() 构造函数而不是 Values(string name) 构造函数。通常,这不是问题,因为 Name 属性会有一个公共集,Web API 会在构造后调用它。在这种情况下,它是私有的,所以我得到了一个默认的 Values 实例。
如果我删除 Values(int) ctor,那么它确实会调用 Values(string) ctor。
ModelBinding 没有选择带有 name 参数的 ctor 是否有原因?
示例代码如下:
using System.Web.Http;
namespace WebAPIPlayground.Controllers
{
public class ValuesController : ApiController
{
public void Post(Values value)
{
var a = value.ID; // == 0
var b = value.Name; // == null
}
}
public class Values
{
public int ID { get; private set; }
public string Name { get; private set; }
private Values() { }
public Values(int id) { ID = id; }
public Values(string name) { Name = name; }
}
}
我已经看过:Routing and Action Selection 和 WebAPI Parameter binding under the hood 以及许多其他网站,但我不理解这种行为。
【问题讨论】:
-
我对此了解不多,但是您声称它应该调用的构造函数与您的 POST 正文没有相同的方法签名(您没有提供
int参数)。 -
@RobertHarvey 感谢您的关注。它不应该在那里。这是我在此处发布之前尝试的最后一件事。
标签: c# asp.net-web-api