我正在使用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。
答案 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