首页 > 解决方案 > 无法解析 JSON 参数

问题描述

我正在使用 WebAPI 来获取 POST 消息。POST 消息的正文: {"datetime":"2017-01-06T20:40:44.2401244Z","filename":"somefilename.csv","datasourcename":"MyDataSource","error":"The uploaded file has no tags."}

POST 中包含的标头: Content-type: application/json

我处理消息的操作方法:[HttpPost]

public void SaveMessage([FromBody] string msg)
{ 
    MyModel w = JsonConvert.DeserializeObject<MyModel>(msg);
    db.MyModels.Add(w);
    db.SaveChanges();
}

我的问题是如何对 JSON 进行编码以便解析它?我无法更改传入的消息。我可以在我的方法中做什么以便我可以阅读它?现在msg总是给我null

标签: jsonasp.net-mvc-4asp.net-web-api

解决方案


鉴于您无法控制正在发送的数据,那么按照评论中的建议,确保您有一个与 JSON 的所需对象模型相匹配的模型

public class MyModel {
    public DateTime datetime { get; set; }
    public string filename { get; set; }
    public string datasourcename { get; set; }
    public string error { get; set; }
}

并利用 Web API 框架的模型绑定能力,让动作从请求体中绑定一个强类型模型。

[HttpPost]
public IHttpActionResult SaveMessage([FromBody] MyModel model) {
    if(ModelState.IsValid) {
        db.MyModels.Add(w);
        if(db.SaveChanges() > 0)
            return Ok();
    }
    return BadRequest();
}

如果保存消息有任何问题,该操作将返回 HTTP 状态代码 400 错误请求,否则将返回 HTTP 状态代码 200 OK。


推荐阅读