OWIN ApiController 访问请求 body/stringified JSON
OWIN ApiController access to the request body/stringified JSON
这是在 OWIN & .Net 4.5.2 中
使用调试证明网络请求正在调用此控制器的方法。
我的事情是请求正文包含一个 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; }
}
这是在 OWIN & .Net 4.5.2 中
使用调试证明网络请求正在调用此控制器的方法。
我的事情是请求正文包含一个 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; }
}