首页 新闻 会员 周边 捐助

asp.net core webapi 怎么接收Josn呀

0
悬赏园豆:10 [已解决问题] 解决于 2016-08-07 16:35

asp.net core webapi 怎么接收Josn呀并转化为实体

现在可以把JSON当一个参数比如 data = "JSON" 这样接收后序列化,有没有之前的接收自动转化的方法 

之前的版本中是可以实现的,现在的asp.net core 好像接收不到值,高手指点

痛快的主页 痛快 | 初学一级 | 园豆:71
提问于:2016-08-06 09:17
< >
分享
最佳答案
0

直接可以接收,和之前的版本一样,我们在实际项目中就是这么用的,比如:

[HttpPost]
public async Task<CheckStatus> Post([FromBody]Checkee checkee)
{
            
} 
收获园豆:10
dudu | 高人七级 |园豆:29732 | 2016-08-06 12:06

这个是我实体写错了类型引起的没接收到

还请问个问题,那就是我我想在Filter中获取这个Json值该怎么取呀,之前用:

byte[] jsonByte = HttpContext.Current.Request.BinaryRead(HttpContext.Current.Request.TotalBytes);
                    postJson = System.Text.Encoding.UTF8.GetString(jsonByte);

现在.net core 中没有BinaryRead方法了,现在该怎么取这个值,谢谢

痛快 | 园豆:71 (初学一级) | 2016-08-06 15:09

@痛快:
在ASP.NEt Core中可以通过Request.Body,示例代码如下:

using (var sr = new StreamReader(Request.Body))
{
    var json = await sr.ReadToEndAsync();//或者sr.ReadToEnd()
}
dudu | 园豆:29732 (高人七级) | 2016-08-06 15:50

@dudu: 这样读出结果为空,页参数中的 [FromBody]  这样是可有值的,请问还需要什么操作吗

痛快 | 园豆:71 (初学一级) | 2016-08-06 16:01

@痛快: 要去掉[FromBody],[FromBody]也是从Request.Body流中读取的,被它读掉后,后面的就读不到了。

dudu | 园豆:29732 (高人七级) | 2016-08-06 17:32

@dudu: 那这样我要在Filter中读取一次做验证,之后在方Webapi方法中还要用到这些参数,怎么做呀?

痛快 | 园豆:71 (初学一级) | 2016-08-06 22:42

@痛快: 试试在上面的代码之前加上

Request.Body.Position = 0;
dudu | 园豆:29732 (高人七级) | 2016-08-06 23:00

@dudu: 加这个直接报错:Specified method is not supported.

痛快 | 园豆:71 (初学一级) | 2016-08-06 23:18

@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()
}
韩天伟 | 园豆:697 (小虾三级) | 2016-08-07 10:12

@痛快: 你filter的代码是怎么写的?

dudu | 园豆:29732 (高人七级) | 2016-08-07 10:17
其他回答(2)
0

webapi直接传json他不是会自己序列化和反序列化吗?

怎么还data=字符串.这种东西哪能用.参数直接写实体.调用方传json字符串就会自己反序列化了

吴瑞祥 | 园豆:29449 (高人七级) | 2016-08-06 09:50
0
 foreach (var postItem in context.ActionArguments)
 {
     postJson += postItem.Value.ToJson();
 }

这样可以在Filter中获取到值

韩天伟 | 园豆:697 (小虾三级) | 2016-08-07 09:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册