无法在多部分帖子中将JSON绑定到ASP.NET模型

时间:2012-04-13 11:23:24

标签: asp.net-mvc json binding controller

我正在使用ASP.NET MVC3控制器从WP7应用程序接收多部分表单帖子。帖子的格式如下:

    {User Agent stuff}
    Content-Type: multipart/form-data; boundary=8cdb3c15d07d36a

    --8cdb3c15d07d36a
    Content-Disposition: form-data; name="user"
    Content-Type: application/json

    {"UserName":"ashish","Password":"ashish"}

    --8cdb3c15d07d36a--

我的控制器看起来像:

    public class User
    {
        public string UserName { get; set;}
        public string Password { get; set; }
    }

    [HttpPost]
    public JsonResult CreateFeed(User user)
    {
    }

我所看到的是,用户未绑定到json,用户对象始终为null。我尝试使用DataContractJsonSerializer创建用户字符串并手动将其绑定到User类,它确实创建并分配了一个对象,但我感到困惑的是为什么它不起作用。

我尝试使用非多表单帖子,发现它可以使用相同的json。任何帮助,将不胜感激。

我在提供代码时看到了这些帖子:ASP.NET MVC. How to create Action method that accepts and multipart/form-data和HTTP规范http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2

1 个答案:

答案 0 :(得分:1)

您正在寻找的答案是here

您必须将其作为字符串读取并在内部进行解析。 所以你的行动将是这样的:

[HttpPost]
public JsonResult CreateFeed(string jsonResponse)
{
    JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
    User user = jsonSerializer.Deserialize<User>(jsonResponse);
}

或者,如果您没有很好的有用的Content-Disposition,其名称与控制器操作方法相关联,您可以执行以下操作:

[HttpPost]
public JsonResult CreateFeed()
{
    StreamReader reader = new StreamReader(Request.InputStream);
    string jsonResponse = reader.ReadToEnd();

    JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
    User user = jsonSerializer.Deserialize<User>(jsonResponse);
}

进一步概述了这种方法here