OWIN ApiController访问请求正文/字符串化JSON

时间:2017-03-31 17:56:20

标签: c# asp.net json asp.net-web-api owin

这是在OWIN& .Net 4.5.2

使用debug我证明这个控制器的方法正在被web请求调用。

我的事情是请求正文包含一个JSON字符串化对象:

  

“{'id':'12','text1':'hello','test2':'world'}”

适用于编码,因为它在线路上传输。

我已经尝试了很多我现在很困惑的事情。

如何获取已解码的字符串以便我可以使用JSON.Parse()或更好地获取.Net来给我一个对象?

在一个版本中(很久以前),我为这个对象定义了一个类型。如果我需要那么伟大,而不是一个很高的挑战。但是,如果我只有字符串中的JSON对象也可以。

public class cController : ApiController {

    [HttpPut]
    public string put(string id) {
        var bdy = this.Request.Content;

        //Console.WriteLine("PUT containers {0}", body);
        return string.Empty;
    }
}

如果有帮助,bdy.ContentReadStream为空。我不知道这是好的,坏的还是重要的。也许Request.Content不是要走的路,但在我看来,如果我要将身体作为流阅读,那么它不应该是空的。

我也尝试过System.Web.HttpContext。如果这是某种答案我回到那个问题没有问题。但我找不到秘密酱。

1 个答案:

答案 0 :(得分:3)

将所需的模型作为参数传递给操作,框架工作应该能够解析它,只要它是有效的JSON

public class cController : ApiController {

    [HttpPut]
    public IHttpActionResult Put(string id,[FromBody] Model body) {
        if(ModelState.IsValue) {    
            return Ok(body.text1);
        }
        return BadRequest();
    }
}

Model定义为

public class Model {
    public string id { get; set; }
    public string text1 { get; set; }
    public string test2 { get; set; }
}