tnblog
首页
视频
资源
登录
有个性,不需要签名
排名
17
文章
40
粉丝
16
评论
21
Linq or Sql 取树末级节点
剑轩 : 这个方法是真的帅!
Python实例 2-12306抢票(二) 下单
18335584353 : 哥。我也是总返回url":"/leftTicket/init",&quot...
Visual Studio小技巧
剑轩 : [斜眼笑][斜眼笑]开会完了认真看了一遍
C#网络流读取(图片)
风清月 : 把一个图片放到字节数组里边[发呆](`・ω・´)
C#与Java二进制编码转换,补码
风清月 : 我勒个擦.....有时间这种问题很坑很难发现哇o(╥﹏╥)o
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

WebAPI传递大数据

10689人阅读 2019/6/12 9:55 总访问:291382 评论:0 收藏:1 手机
分类: .NET

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

  1. 无效的URL:URL字符串太长

    1. FormUrlEncodedContent
    :使用application/x-www-form-urlencoded MIME类型编码的名称/值元组的容器,只能传输ContentType:application/x-www-form-urlencoded

实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public async Task<string> Post(string url, Dictionary<string, string> param)
       {
           string result="";
           HttpClient click = new HttpClient();
           HttpContent postContent = new FormUrlEncodedContent(param);
           try
           {
               var respMsg = await click.PostAsync(url, postContent);
               respMsg.EnsureSuccessStatusCode();
               result = await respMsg.Content.ReadAsStringAsync();
           }
           catch (HttpRequestException ex)
           {
               result = ex.Message;
           }
           return result;
       }

可是当param太大时 new FormUrlEncodedContent(param)就会抛出异常

  1. 无效的URL:URL字符串太长


可以换一种方式实现  StringContent!

    1. StringContent
    :基于字符串提供http的内容,传输类型皆可(比如常用的application/x-www-form-urlencoded、application/json、multipart/form-data….)

    实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public async Task<string> Post(string url, Dictionary<string, string> param)
       {
           string result="";
           HttpClient click = new HttpClient();
           var urlcode = HttpHelp.DicToFormCode(param); //需要把键值对转为urlencoded
           StringContent postContent = new StringContent(urlcode, Encoding.UTF8, "application/x-www-form-urlencoded");
           try
           {
               var respMsg = await click.PostAsync(url, postContent);
               respMsg.EnsureSuccessStatusCode();
               result = await respMsg.Content.ReadAsStringAsync();
           }
           catch (HttpRequestException ex)
           {
               result = ex.Message;
           }
           return result;
       }

static string DicToFormCode(Dictionary<string, string> param)
       {
           string pc = "";

           foreach (var p in param)
           {
               pc += HttpUtility.UrlEncode(p.Key);
               if (p.Value.GetType() == typeof(object[]))
                   pc += "=" + HttpUtility.UrlEncode(JsonConvert.SerializeObject(p.Value)) + "&";
               else
                   pc += "=" + HttpUtility.UrlEncode(p.Value.ToString()) + "&";
           }
           pc = pc.TrimEnd('&');

           return pc;
       }





欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

为什么要使用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做文件上传的功能,研究过后感觉使用起来体验还是比较好的,不过网上的资料很多都记录的很简...

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...

net core webapi运用自定义json格式

接上一篇net core api json相关,全局配置,时间格式化,首字母小写等:http://www.tnblog.net/aojiancc2/article/details/2...