求大佬对webapi传参类型进行解惑

ayun00 2018-03-18 05:22:22
字符串传参

public Results testfunction1(string id)
{}

对象传参

public Results testfunction2(person student)
{}


通常情况下 我是用 contentType = "application/json; charset=utf-8"; 方式传递 json 字符串

但是有时候可以用json 对象也可以, 有时候不行
用字符串的时候也是 , 有时候可以 有时候不行

被搞迷糊了 , 到底 什么情况对应 json 对象, 什么情况对应字符串, 什么时候对应 json字符串
...全文
397 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayun00 2018-07-03
  • 打赏
  • 举报
回复
引用 10 楼 daixf_csdn 的回复:
[quote=引用 8 楼 ayun00 的回复:]
[quote=引用 7 楼 daixf_csdn 的回复:]
搞清楚两个事情:
1、传json和传json字符串是两回事
2、mvc本身实现了一些功能,能将json对象自动因为到方法参数上去,生成反序列化为对象。其本质相当于手工调用了一下数据映射:
TryUpdateModel(student); 你可以了解一下TryUpdateModel

不好意思我没有表达清楚 , 我现在调用webapi控制器方法的时候, 有的插件ajax在提交前会把json对象转换成字符串, 有的没有, 但是我在写webapi的方法时候, 没有搞清楚怎么设置接收参数, 导致有的方法只能接收json字符串, 有的方法只能接收json对象[/quote]
你还是没有描述清楚你想干嘛?你是说你有多种插件,提交时有时有json对象有时用json字符串这个现实不可避免,然后在webapi里如何兼容处理这种情况??是否??[/quote]
对 主要就是想做兼容处理,另外想确认下, 什么情况下,mvc把json字符串或者json对象 转换成 c# 的实体对象的映射规则
  • 打赏
  • 举报
回复
webapi不需要你做什么特殊处理,你定义实体,然后以application/json传进来的body字符串能对应实体就可以了
如果你只定义string参数的话,除非你显示指明[frombody],否则默认string是从querystring部分读取的
ayun00 2018-06-26
  • 打赏
  • 举报
回复
引用 7 楼 daixf_csdn 的回复:
搞清楚两个事情:
1、传json和传json字符串是两回事
2、mvc本身实现了一些功能,能将json对象自动因为到方法参数上去,生成反序列化为对象。其本质相当于手工调用了一下数据映射:
TryUpdateModel(student); 你可以了解一下TryUpdateModel

不好意思我没有表达清楚 , 我现在调用webapi控制器方法的时候, 有的插件ajax在提交前会把json对象转换成字符串, 有的没有, 但是我在写webapi的方法时候, 没有搞清楚怎么设置接收参数, 导致有的方法只能接收json字符串, 有的方法只能接收json对象
圣殿骑士18 2018-06-26
  • 打赏
  • 举报
回复
如果不是我猜测的兼容性需求。那只能是说,你因为搞不清楚插件提交时,到底是以哪种方式提交的,所以也就搞不清楚如何接收了,那么你就不应该提这个问题,你去搞清楚 插件到底是以哪种方式提交的就行了,怎么提交就决定了怎么接收!
圣殿骑士18 2018-06-26
  • 打赏
  • 举报
回复
引用 8 楼 ayun00 的回复:
[quote=引用 7 楼 daixf_csdn 的回复:]
搞清楚两个事情:
1、传json和传json字符串是两回事
2、mvc本身实现了一些功能,能将json对象自动因为到方法参数上去,生成反序列化为对象。其本质相当于手工调用了一下数据映射:
TryUpdateModel(student); 你可以了解一下TryUpdateModel

不好意思我没有表达清楚 , 我现在调用webapi控制器方法的时候, 有的插件ajax在提交前会把json对象转换成字符串, 有的没有, 但是我在写webapi的方法时候, 没有搞清楚怎么设置接收参数, 导致有的方法只能接收json字符串, 有的方法只能接收json对象[/quote]
你还是没有描述清楚你想干嘛?你是说你有多种插件,提交时有时有json对象有时用json字符串这个现实不可避免,然后在webapi里如何兼容处理这种情况??是否??
圣殿骑士18 2018-06-22
  • 打赏
  • 举报
回复
搞清楚两个事情:
1、传json和传json字符串是两回事
2、mvc本身实现了一些功能,能将json对象自动因为到方法参数上去,生成反序列化为对象。其本质相当于手工调用了一下数据映射:
TryUpdateModel(student); 你可以了解一下TryUpdateModel
圣殿骑士18 2018-06-22
  • 打赏
  • 举报
回复
不会一会儿行,一会儿不行,那是你自己调试时,某些东西变了而不自知导致的。

如果你传的是:
{
personCode: "1",
personName: "xxx",
}

那么,应该根据这个方法参数转化:
person student (假设peson类里有如下两个字段)

而你如果用这个参数转化,是收不到数据的,因为json里没有定义这个参数名:id

如果,你json上传前,先包装了:
var jsonStr = JSON.stringify({
personCode: "1",
personName: "xxx",
});
然后用id参数传递:
htttp://www.xxx.com/xxx?id=jsonStr
那么后台使用参数id的方法可以收到json字符串,你需要在后台把字符串自己解析回json对象再来使用。

正怒月神 2018-06-22
  • 打赏
  • 举报
回复
引用 4 楼 ayun00 的回复:
[quote=引用 3 楼 hanjun0612 的回复:]
没有路由到,那应该是对象和传递的Json不匹配

不是json 不匹配, 貌似是有时候会自动转 json字符串到json对象, 有时候不会, 还没有摸清倒是是什么情况会把字符串转成对象[/quote]
同样的json字符串,正常来说,试多少次都是一样的,要么都成功,要么都失败。
所以只有不同json的时候,可能导致json转换对象时不匹配。
ayun00 2018-06-22
  • 打赏
  • 举报
回复
引用 3 楼 hanjun0612 的回复:
没有路由到,那应该是对象和传递的Json不匹配

不是json 不匹配, 貌似是有时候会自动转 json字符串到json对象, 有时候不会, 还没有摸清倒是是什么情况会把字符串转成对象
正怒月神 2018-03-19
  • 打赏
  • 举报
回复
没有路由到,那应该是对象和传递的Json不匹配
ayun00 2018-03-18
  • 打赏
  • 举报
回复
引用 1 楼 mirror030 的回复:
这个与路由规则有关系 string id这个,应该是querystring http://xx.api/?id=111 能收到111 Person p这种,上传表单形式(默认的)能收到
都是用post 方式, 有时候能路由到 ,有时候不行 , 应该是和ajax的写法有关 , 但是老是搞不清楚对应关系
mirrorspace 2018-03-18
  • 打赏
  • 举报
回复
这个与路由规则有关系 string id这个,应该是querystring http://xx.api/?id=111 能收到111 Person p这种,上传表单形式(默认的)能收到

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧