直接可以接收,和之前的版本一样,我们在实际项目中就是这么用的,比如:
[HttpPost]
public async Task<CheckStatus> Post([FromBody]Checkee checkee)
{
}
这个是我实体写错了类型引起的没接收到
还请问个问题,那就是我我想在Filter中获取这个Json值该怎么取呀,之前用:
byte[] jsonByte = HttpContext.Current.Request.BinaryRead(HttpContext.Current.Request.TotalBytes); postJson = System.Text.Encoding.UTF8.GetString(jsonByte);
现在.net core 中没有BinaryRead方法了,现在该怎么取这个值,谢谢
@痛快:
在ASP.NEt Core中可以通过Request.Body,示例代码如下:
using (var sr = new StreamReader(Request.Body))
{
var json = await sr.ReadToEndAsync();//或者sr.ReadToEnd()
}
@dudu: 这样读出结果为空,页参数中的 [FromBody] 这样是可有值的,请问还需要什么操作吗
@痛快: 要去掉[FromBody],[FromBody]也是从Request.Body流中读取的,被它读掉后,后面的就读不到了。
@dudu: 那这样我要在Filter中读取一次做验证,之后在方Webapi方法中还要用到这些参数,怎么做呀?
@痛快: 试试在上面的代码之前加上
Request.Body.Position = 0;
@dudu: 加这个直接报错:Specified method is not supported.
@dudu:
foreach (var postItem in context.ActionArguments) { postJson += postItem.Value.ToJson(); }
这样取到的是序列化后的值,原始值还是取不到,用下面方式法取到的值始终为空
using (var sr = new StreamReader(Request.Body)) { var json = await sr.ReadToEndAsync();//或者sr.ReadToEnd() }
@痛快: 你filter的代码是怎么写的?
webapi直接传json他不是会自己序列化和反序列化吗?
怎么还data=字符串.这种东西哪能用.参数直接写实体.调用方传json字符串就会自己反序列化了
foreach (var postItem in context.ActionArguments) { postJson += postItem.Value.ToJson(); }
这样可以在Filter中获取到值