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

c# HttpClient 给webapi post接口传递一个参数。传递参数的同时传递一个cookie

27459人阅读 2020/5/22 18:23 总访问:5182459 评论:1 收藏:0 手机
分类: .NET

webapi post传递一个参数是真的坑,有多坑,可以看看这篇文章:
https://www.tnblog.net/aojiancc2/article/details/2874

当然现在说的是怎么用HttpClient来调用webapi post只有一个参数的情况

webapi如下,就是一个非常简单的post

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

开始尝试调用,肯定要避免第一个坑,键名为空

  1. var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
  2. HttpClient httpClient = new HttpClient(handler);
  3. var content = new FormUrlEncodedContent(new Dictionary<string, string>()
  4. {
  5. {"", "hhhh"}//键名必须为空
  6. });
  7. var response = httpClient.PostAsync("your address", content).Result;
  8. //确保HTTP成功状态值
  9. response.EnsureSuccessStatusCode();
  10. //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
  11. string result = response.Content.ReadAsStringAsync().Result;

然鹅报错:StatusCode: 415, ReasonPhrase: ‘Unsupported Media Type’

按照js调用的经验,设置一个json格式在尝试一下
  1. var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
  2. HttpClient httpClient = new HttpClient(handler);
  3. var content = new FormUrlEncodedContent(new Dictionary<string, string>()
  4. {
  5. {"", "hhhwww"}//键名必须为空
  6. });
  7. //设置json格式
  8. content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
  9. var response = httpClient.PostAsync("你的地址", content).Result;
  10. //确保HTTP成功状态值
  11. response.EnsureSuccessStatusCode();
  12. //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)
  13. string result = response.Content.ReadAsStringAsync().Result;

然鹅,和ajax调用一样报错:StatusCode: 400, ReasonPhrase: ‘Bad Request

按照ajax调用的经验,把它换成stringcontent传值把,注意三点,不能有key,而且格式设置成json,还有就是格式用json序列化一下
  1. httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
  2. StringContent strcontent = new StringContent(JsonConvert.SerializeObject("alal"), Encoding.UTF8, "application/json");
  3. var result = httpClient.PostAsync("your address", strcontent).Result;


  1. HttpClient httpClient = new HttpClient();
  2. httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
  3. StringContent strcontent = new StringContent(JsonConvert.SerializeObject("aa"), Encoding.UTF8, "application/json");
  4. var message = new HttpRequestMessage(HttpMethod.Post, "your address");
  5. //设置cookie信息
  6. message.Headers.Add("Cookie", "token=" + token);
  7. //设置contetn
  8. message.Content = strcontent;
  9. //发送请求
  10. var httpResponseHeaders = httpClient.SendAsync(message).Result;

搞定收工


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

评价

忘掉过去式

2020/5/23 16:40:40

优秀[旺柴][旺柴]

c HttpClient设置cookies

通过设置handler.UseCookies=true(默认为true),默认的会自己带上cookiesvarhandler=newHttpClientHandler(){UseCookies=tr...

c HttpClient手动设置cookie

C# HttpClient手动设置cookie var handler = new HttpClientHandler() { UseCookies = false}; var client = new HttpCli...

范德萨

toke一个缓存,防止多次访问

Redis 缓存一个toke 代码如下:publicstaticstringGetToken() { RedisClientredisClient=newRedisClient(); //先从缓存...

.net core过滤器viewbag赋值

代码很简单,context.Controller是个object对象,需要自己转化成Controller即可,就可以使用Controller里边的东西了//先强...

layuitable中的单选按钮添加点击事件

比如这样的一个表格其实用form.on就行了,里边接你需要监听事件的类型比如单选就是radio后面的premissonradio就是lay-filte...

有什么建议即将出国留学的学生?

1.学好英语有人肯定会纳闷了,为什么马上就要出国了,你还建议我学好英语呀。那是因为你雅思是考到6.5、7,但是当你初到国...

vue3,vue组件,props一个对象参数vue组件间传参数vue父组件子组件传参数组件参数类型父组件调用子组件的方法vue组件事件监听,子组件传递方法,子组件调用父组件方法

[TOC]组件可以使用props给组件传值,可以同时传递多个,可以是任意类型,比如字符串或者对象。 下面是个简单的例子: &lt...

后台返回json数据前台和前台解析json数据(总结)

前言:hello 大家好,我是小付,今天给大家分享的是后台返回json数据给前台和前台解析json数据,让我们一起来看看吧! 一般...

js不同用户随机显示不同颜色

彼年豆蔻,谁许谁地老天荒。首先js随机产生颜色思路就是随机产生6个16进制的数字即可//js随机产生颜色 functionrandomColo...

笔记本共享外网络台式机上网

笔记本共享外网络给台式机上网提示:我们都知道,台式电脑是不可以连接WiFi的,除非通过WiFi驱动器外接设备进行使用!那么...

输入的值添加约束

publicpartialclassUserInfo { publicintid{get;set;} [Required]//不能为空 [StringLength(12)]//控制输入字符的长度 ...

反射调用方法方法提供泛型,动态提供泛型参数

有些时候需要把泛型当做参数来进行传递,直接传递是不行的,这个时候我们就可以通过反射来调用。首先反射可以拿到某个属性...

.net方法动态提供泛型参数

有的时候需要把泛型当做参数来进行传递,直接传递是不行的,这个时候我们就可以通过反射来调用。反射可以拿到某个属性的类...

反射调用泛型方法方法提供泛型

有些时候需要把泛型当做参数来进行传递,直接传递是不行的,这个时候我们就可以通过反射来调用。首先反射可以拿到某个属性...