2

如果我使用 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"
}

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

4

2 回答 2

0

这实际上是设计使然。有关更多详细信息,请查看此处此处

于 2012-12-26T20:43:50.037 回答
0

对我来说,这看起来像是 RC 代码中的错误。但是,Web API 中的模型绑定与 ASP.NET MVC 模型绑定是分开的,因此如果您添加了一些自定义MVC模型绑定代码,它将不适用于 Web API 控制器。这篇好的博客文章有一些关于 Web API 和 MVC 模型绑定之间差异的好信息。

于 2012-06-18T16:05:22.427 回答