ModelState键在MVC和WebApi之间不一致

时间:2012-06-18 07:33:14

标签: asp.net-mvc asp.net-web-api

如果我使用MVC控制器,我会获得该键的属性名称。如果我使用WebApi控制器,我会将“parameterName.property”作为密钥的名称。

public class SomeClass
{
    [StringLength(12, MinimumLength = 12)]
    public string Blah { get; set; }
}

在MVC控制器中

[HttpPost]
public ActionResult Create(SomeClass collection)
{
    // ModelState.Keys.ElementAt(0) == "Blah"
}

在WebApiController中(传递一些请求体,如“blah = 1”)

public HttpResponseMessage Post(SomeClass someClass1)
{
    // ModelState.Keys.ElementAt(0) == "someClass1.Blah"
}

所以我没有获得与BlaC一致的“Blah”,而是获得了“someClass1.blah”。为什么会出现这种不一致?我缺少一个设置吗?这是RC中的错误吗?这两个项目都是在VS2012 RC中从零开始创建的。

2 个答案:

答案 0 :(得分:0)

这看起来像RC代码中的一个错误。但是,Web API中的模型绑定与ASP.NET MVC模型绑定是分开的,因此如果添加了一些自定义 MVC 模型绑定代码,则它将不适用于Web API控制器。这个good blog post提供了一些关于Web API和API之间差异的好信息。 MVC模型绑定。

答案 1 :(得分:0)

这实际上是设计的。有关详细信息,请查看herehere