应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

.net core webapi post接口传递参数

21068人阅读 2019/11/20 23:10 总访问:5182922 评论:3 收藏:11 手机
分类: .NET Core

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

传递一个参数:

后台:

  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.     successfunction (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.                 successfunction (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.     successfunction (a{
  10.         console.log(a);
  11.     }
  12. });

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


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

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

所以要注意这两个地方


传递多个参数方法二:JObject

注意由于JObject是Newtonsoft.Json下的,所以使用的时候要确保Json序列化是使用的这个3.1开始默认就不是这个了,所以如果要使用它要自己在依赖注入的时候加一句AddNewtonsoftJson()

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3.     services.AddControllersWithViews().AddRazorRuntimeCompilation().AddNewtonsoftJson();
  4. }


和传递一个对象几乎是一样的,只是我们有时候觉得麻烦懒得就定义一个对象就可以使用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>();



欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

Murphy

2019/11/23 14:32:33

确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但是想接受类似string **,string **这种,死活接受不到,后来发现是什么前台传递方式不对

剑轩:@Murphy对头,post传值确实有点坑,特别是传递一个参数的时候

2019/11/24 21:38:10 回复

是伍尚金哇_v

2020/5/23 16:33:45

有[frombody]的只能用对象方式接收  确实坑

为什么要使用webapi而不直接使用controller

彼年豆蔻,谁许谁地老天荒。webapi能做的事情,controller都能做,为什么要使用webapi而不直接使用controller呢?这就好比...

webapi转json格式

创建WebApi项目时出现的xml格式,每次都去转换比较麻烦在Global设置全局输出json格式://直接xml干掉为json GlobalConfigu...

控制台应用程序托管webapi

在没有iis的情况下,webapi是可以自托管的so,我们从写一个webapi程序开始:1、创建一个控制台应用程序,然后在控制台应用...

.net core上传图片,文件。webapi 上传图片文件

上传图片的前台代码都完全一样,直接来贴后台的代码吧publicActionResultUploadImage(List&lt;IFormFile&gt;upfile) { ...

使用swagger创建webapi文档描述---详解

在前后端分离开发中,作为后端如何给前端提供有效直观的接口文档呢?没错,就是使用swagger 俗称“丝袜哥”教程:一、首先...

通过PlUpload控件配合webapi接口完成压缩上传文件

最近一段时间都在使用PlUpload做文件上传的功能,研究过后感觉使用起来体验还是比较好的,不过网上的资料很多都记录的很简...

webapi传递大数据

在接口中传输图片进制流或BASE64字符串时,使用FormUrlEncodedContent处理参数时,可能会因为参数太长导致异常无效的URL:U...

AJAX调用webapi上传图片或文件。设置token,设置Authorization Bearer

AJAX调用webapi上传图片或文件,并返回刚上传的文件名。废话不多说直接贴代码吧html相关:&lt;!DOCTYPEhtml&gt; &lt;html&...

webapi与rpc区别

首先说rpc,rpc的定义是远程过程调用,通俗讲就是客户端通过网络远程调用服务端的方法,比如一个用java写的method。rpc是基...

.net HttpClient和webapi相关的东东先记录一点。传递Authorization headertoken

get请求传递Authorization header,tokenstringurl=&quot;你请求的url&quot;; stringtoken=&quot;yourtoken&quot;; Http...

webapi报错:Attribute routes with the same name 'Get' must have the same template

是因为 asp.net core 中默认创建的 api controller 中的 Get(id) Action的属性都是[HttpGet(&quot;{id}&quot;, Name = &quo...

net core webapi版本控制

webapi的版本控制好处很多,要实现其实也比较简单。在webapi中根据不同的版本创建文件夹。然后在不同的api里边添加不同的路...

net core webapi路由

如下我们可以通过路由传递两个参数请求地址参考如下: https://localhost:5001/api/home/aojiancc2/2622最后两个可以作为参...

.net webapi Newtonsoft.Json返回需要的字段,忽略某些字段,修改字段名,动态返回需要的字段等

有时候我们在写webapi的时候,不想把正常用的对象所有字段都返回,我们需要进行一些筛选,忽略某些字段,大概说一下几种方法...

.net core webapi json相关,全局配置,时间格式化首字母小写等

在ConfigureServices中可以进行全局json配置,例如,全局处理一下事件格式问题services.AddMvc(option=&gt; { //option.F...