Asp.net mvc 4 ASP.MVC:JsonValueProviderFactory是否可以处理querystring变量?
回到ASP.NET MVC 3的时代,我根据使用Asp.net mvc 4 ASP.MVC:JsonValueProviderFactory是否可以处理querystring变量?,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc 4,Asp.net Web Api,回到ASP.NET MVC 3的时代,我根据使用JsonValueProviderFactory将JSON数据作为查询字符串参数绑定到一个查询字符串 今天,我发现这不管用。在MVCWebAPI中,它们似乎只将发布的JSON数据绑定到强类型对象(请求体中的JSON),而不绑定查询字符串中的JSON数据 MVC4就是这样,还是我做错了什么 我的路线: routes.MapRoute( name: "CreateUser", url: "{controller}/CreateUser/
JsonValueProviderFactory
将JSON数据作为查询字符串参数绑定到一个查询字符串
今天,我发现这不管用。在MVCWebAPI中,它们似乎只将发布的JSON数据绑定到强类型对象(请求体中的JSON),而不绑定查询字符串中的JSON数据
MVC4就是这样,还是我做错了什么
我的路线:
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
在您的情况下,框架似乎无法理解您传递到querystring中的内容是JSON。对localhost/CreateUser/{“CardNumber”:“11111111”}
的请求将由路由数据值提供程序进行,因此它将存储一个键值:userAccount={“CardNumber”:“11111111”}
。然后DefaultModelBinder将通过键userAccount
请求一个值,并尝试将其绑定到MyObjectType
。此时,他无法知道他得到的值是JSON字符串
JsonValueProvider
仅当请求具有contentType:application/json
时才会启用。如果您使用body{CardNumber:“1111111”}
发送这样的请求,那么提供者将把它反序列化到一个字典中,DefaultModelBinder将很容易从中获取值