gpt4 book ai didi

asp.net-mvc-4 - ASP.MVC : Does JsonValueProviderFactory work with querystring variables?

转载 作者:行者123 更新时间:2023-12-02 02:02:24 24 4
gpt4 key购买 nike

回到 ASP.NET MVC 3 的那一天,我根据 Phil Haack's Blog 使用了 JsonValueProviderFactory将 JSON 数据作为查询字符串参数绑定(bind)到 strongly typed parameter .

今天,我发现这不起作用。在 MVC Web API 中,它们似乎只将 POSTED JSON 数据绑定(bind)到强类型对象(请求正文中的 JSON),而不是查询字符串中的 JSON 数据。

这是 MVC 4 的情况还是我做错了什么?

我的路线:

routes.MapRoute(
name: "CreateUser",
url: "{controller}/CreateUser/{userAccount}",
defaults: new { action = "CreateUser"} );

我的方法:

public JsonResult CreateUser( MyObjectType userAccount)
{ /* user is null */ }

我的类(class):

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

最佳答案

在您的情况下,框架似乎无法理解您传递给查询字符串的内容是 JSON。对 localhost/CreateUser/{"CardNumber":"11111111"} 的请求将由路由数据值提供程序处理,因此它将存储一个键值:userAccount={"CardNumber": “11111111”。然后 DefaultModelBinder 将通过键 userAccount 请求一个值,并尝试将其绑定(bind)到 MyObjectType。此时他无法知道他得到的值是一个 JSON 字符串。

JsonValueProvider 仅在请求具有 contentType: application/json 时才会参与。如果您发送带有正文 {CardNumber:"1111111"} 的此类请求,提供程序会将其反序列化为一个字典,DefaultModelBinder 将从中轻松获取值。

关于asp.net-mvc-4 - ASP.MVC : Does JsonValueProviderFactory work with querystring variables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16594709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com