早在 ASP.NET MVC 3 时代,我JsonValueProviderFactory
按照Phil Haack 的博客将 JSON 数据作为查询字符串参数绑定到强类型参数。
今天,我发现这行不通。在 MVC Web API 中,它们似乎只将 POSTED JSON 数据绑定到强类型对象(请求正文中的 JSON),而不是查询字符串中的 JSON 数据。
这是 MVC 4 的情况还是我做错了什么?
我的路线:
routes.MapRoute(
name: "CreateUser",
url: "{controller}/CreateUser/{userAccount}",
defaults: new { action = "CreateUser"} );
我的方法:
public JsonResult CreateUser( MyObjectType userAccount)
{ /* user is null */ }
我的课:
public class MyObjectType
{
public string CardNumber {get;set;}
}
更多测试:
// This completely fails, even if you URL Encode it:
localhost/CreateUser/{"CardNumber":"11111111"}
// Creates the object but all properties are null
localhost/CreateUser?{"CardNumber":"11111111"}
localhost/CreateUser?userAccount={"CardNumber":"11111111"}
即使我们不需要这些值,我也尝试序列化对象的所有属性,确保名称在拼写和大小写等方面相同。
我可以将参数作为字符串获取,然后使用 JSON.NET 反序列化它而不会出现问题,但我也想用它DataAnnotations
来检查ModelState.IsValid
.