简体   繁体   中英

OWIN ApiController access to the request body/stringified JSON

This is in OWIN & .Net 4.5.2

Using debug I'm proving this controller's method is being called by the web request.

My thing is the request body contains a JSON stringified object:

"{ 'id':'12', 'text1':'hello', 'test2':'world' }"

Which is applicably encoded as it is transferred on the line.

I've tried so many things I'm so confused now.

How do I get the decoded string so I can JSON.Parse() that or better yet get .Net to just given me an object?

In one version (long ago now) I had a defined type for this object. If I need that great, not a high challenge. But if I only have the JSON object from the string that's fine too.

public class cController : ApiController {

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

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

In case it helps, the bdy.ContentReadStream is null. I don't know if this is good, bad, or important. Maybe Request.Content isn't the way to go but seems to me like if I'm going to read the body as a stream then it shouldn't be null.

I also tried working through System.Web.HttpContext . If that is somehow the answer I have no problem going back to that. But I couldn't find the secret sauce.

Pass the desired model as a parameter to the action and the frame work should be able to parse it provided it is valid JSON

public class cController : ApiController {

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

Where Model is defined as

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM