这是在 OWIN 和 .Net 4.5.2 中
使用调试证明网络请求正在调用此 Controller 的方法。
我的意思是请求正文包含一个 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
工作。如果那是某种程度上的答案,我可以毫无疑问地回到那个问题。但我找不到秘诀。
最佳答案
将所需的模型作为参数传递给操作,框架应该能够解析它,前提是它是有效的 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; }
}
关于c# - OWIN ApiController 访问请求正文/字符串化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43146890/