Asp.Net mvc,张贴json?

我的iphone客户端将以下json发布到我的mvc服务。 从html表单发布数据时,它会自动将表单数据转换为UserModel并将对象传递给我的Create方法,但是当我从iphone发送请求正文中的JSON字符串时,它返回为null。

从JSON到Object的转换最干净的解决方案是什么。

我宁愿不为不同的客户端创建多个方法,所以我试图在iphone和mvc客户端上使用相同的方法。

我的要求的身体:

{ "firstName" : "Some Name", "lastName" : "Some Last Name", "age" : "age" } 

我的模型和行动结果

 public class UserModel { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } } [HttpPost] public Create ActionResult(UserModel user) { // user is null userStorage.create(user); return SuccessResultForModel(user); } 

您需要将HTTP Header(接受)设置为’application / json’,以便MVC知道您传递JSON并完成解释它的工作。

 accept: application/json 

在这里查看更多信息: http : //www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

更新:使用MVC3和jQuery工作示例代码

控制器代码

 namespace MvcApplication1.Controllers { public class HomeController : Controller { public ActionResult Index() { return View(); } [HttpPost] public JsonResult PostUser(UserModel data) { // test here! Debug.Assert(data != null); return Json(data); } } public class UserModel { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } } } 

查看代码

 @{ ViewBag.Title = "Index"; }   

Index

尝试将方法更改为此以查看是否获得FirstName或LastName

 public Create ActionResult(string FirstName, string LastName) 

迟到但希望它可以帮到某人。

从JSON到Object的转换最干净的解决方案是什么?

  $.post("http://localhost:52161/Default/PostRawJson/", { json: { "firstName" : "Some Name", "lastName" : "Some Last Name", "age" : "age" }}); public void PostRawJson(string json) { var person = System.Web.Helpers.Json.Decode(json); person.firstname... } 

这样,您就可以按照要求在控制器中使用纯JSON对象。

我最近提出了一种更简单的发布JSON的方法,还有从我的应用程序中的模型转换的额外步骤。 请注意,您必须为控制器创建模型[JsonObject]以获取值并进行转换。

请求:

  var model = new MyModel(); using (var client = new HttpClient()) { var uri = new Uri("XXXXXXXXX"); var json = new JavaScriptSerializer().Serialize(model); var stringContent = new StringContent(json, Encoding.UTF8, "application/json"); var response = await Client.PutAsync(uri,stringContent).Result; ... ... } 

模型:

 [JsonObject] [Serializable] public class MyModel { public Decimal Value { get; set; } public string Project { get; set; } public string FilePath { get; set; } public string FileName { get; set; } } 

服务器端:

 [HttpPut] public async Task PutApi([FromBody]MyModel model) { ... ... } 

根据Glenn Ferries的回答,这看起来有效,直到我看到实际发送到控制器的内容 – 而且它不是JSON。

因此调整了一下:

这是MVC 4和jQuery 1.7 ish

控制器动作方法(UserModel对象有问题):

 [HttpPost] public ActionResult Create(UserModel user) { Debug.Assert(data != null); return Json(data); } 

发送请求的jQuery代码:

  

MVC控制器动作很简单。

硬比特确保您实际上正在向其发送JSON以进行测试。

与POST一起使用时,jQuery ajax()方法通常会在请求正文中使用查询字符串格式对参数进行编码。 MVC可以愉快地解压缩它。

要使用ajax()实际发送JSON,您必须使用JSON.stringify()。

并且要使MVC正确解释该请求,您需要设置contentType