.net core webapi post传递参数实战

我希望有个如你一般的人,如山间清爽的风,如古城温暖的光,从清晨到夜晚,从山野到书房,只要最后是你就好

传递一个参数:

后台:

 
  1. [HttpPost]
  2. public void Post([FromBody] string value)
  3. {
  4. }

前台这样写会报错:

 
  1. $.ajax({
  2.     url: 'http://localhost:8093/api/v1/test',
  3.     type: "post",
  4.     data: { "value": "sdfsf" },
  5.     success: function (a) {
  6.         console.log(a);
  7.     }
  8. });

415 (Unsupported Media Type):

把  contentType设置成:"application/json"

报错:400 (Bad Request)

把参数变成json字符串:

 
  1. $.ajax({
  2.                 url: 'http://localhost:8093/api/v1/test',
  3.                 type: "post",
  4.                 contentType: "application/json",
  5.                 data:JSON.stringify({ "value": "sdfsf" }),
  6.                 success: function (a) {
  7.                     console.log(a);
  8.                 }
  9.             });

一样报错:400 (Bad Request)

在postman中也是一样:

经过测试,使用JSON.stringify({"","ss"})   ,   JSON.stringify({"value","ss"}) ,   {"value","ss"}   ,   {"","ss"}  这四种方式都不行

应该这样写:

直接不带key的消息,key传递是空都是不得行的

效果如下:

post man中这样传递,直接给一个字符串是可以的

用swagger测试的时候,注意也要带上双引号才行,不然也会报错的

httpclient访问情况可以参考:

https://www.tnblog.net/aojiancc2/article/details/3834

如果把后台修改成如下,把formbody去掉

 
  1. [HttpPost]
  2. public string Post(string value)
  3. {
  4.    return value;
  5. }

这种方式用上面的所有尝试尝试都不行可以使用?的方式传递参数

post man中各种参数都尝试了一遍都不行,只能使用?传递参数

感觉很坑哇

但是直接通过request来取,from-data和x-www-form-urlencoded都是成功取出来的

只是这样传递的时候要把那个请求json格式的标识去掉,否则request.from会报错

传递多个参数方法一:使用对象传递

后台:

 
  1. [HttpPost]
  2. public void Post([FromBody]DTO_MyFocus value)
  3. {
  4. }

首先要注意设置请求格式为json

不然会报错:415 Unsupported Media Type

传递一个对象还是比较科学的,只要设置好contentType设:application/json 即可成功

后台可以接受到参数:

前端ajax调用的时候注意:这样写会报错:415 Unsupported Media Type

 
  1. var jsonobj = {
  2.     "BlogName": "aaaa",
  3.     "UserName": "晓"
  4. };
  5. $.ajax({
  6.     url: 'http://localhost:8093/api/v1/test?value=ssss',
  7.     type: "post",
  8.     data: jsonobj,
  9.     success: function (a) {
  10.         console.log(a);
  11.     }
  12. });

因为你需要把请求头设置为json,

当然就算你把请求头设置成json后,如上的调用还是会报错:400 (Bad Request)

非常坑你需要把json转化成字符串才行,这也是和framework不同地方,postman中测试直接给json对象都可以

所以要注意这两个地方

传递多个参数方法二:JObject

和传递一个对象几乎是一样的,只是我们有时候觉得麻烦懒得就定义一个对象就可以使用JObject来实现了

 
  1. [HttpPost]
  2. public void Post(JObject jsonObject)
  3. {
  4.     //把jsonObject反序列化成dynamic
  5.     string jsonStr = JsonConvert.SerializeObject(jsonObject);
  6.     var jsonParams = JsonConvert.DeserializeObject<dynamic>(jsonStr);
  7.     //获取dynamic里边的数据
  8.     string destId = jsonParams.destId;
  9.     string token = jsonParams.token;
  10. }

jobject的解析还可以使用直接通过属性获取的方式

 
  1. JObject jObject = JsonConvert.DeserializeObject<JObject>(result);
  2. //通过summary属性获取新闻摘要
  3. string summary = jObject["summary"].Value<string>();
  4. //获取log_id
  5. string log_id = jObject.GetValue("log_id").Value<string>();

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值