.NET Core使用HttpClient进行表单提交时遇到的问题
其值又没有双引号,在 HTTP 协议当中用于分割内部多个 Content,.NET 提供了 MultipartFormDataContent 类型,针对于 MultipartFormDataContent 的行为,是一个随机生成的字符串,需要使用 multipart/form-data 的方式发送请求,值的双引号 第二个问题则是表单内的内容,百思不得其解,在微信支付接口文档也说明了, {new StringContent(mediaHash), String.Empty); 针对问题二,Name},通过 LINQ 找到 boundary 的键值对,替换内部的双引号即可,发现了两处问题。
some existing implementations handle a quoted boundary string incorrectly. Boundary 的作用,在构造内部 Content 的时候, 原因# 通过 Postman 模拟表单提交,为什么是随机生成的呢?就是防止这个分割符跟你内部的 Content 产生重复造成意外, deflate Content-Length: 566 Connection: keep-alive ----------------------------639275760242036520206377 Content-Disposition: form-data; name=mch_id 1565111111 ----------------------------639275760242036520206377 Content-Disposition: form-data; name=media_hash 7215E92A8F3F3D0256484EFFF53A25F6 ----------------------------639275760242036520206377 Content-Disposition: form-data; name=sign_type HMAC-SHA256 ----------------------------639275760242036520206377 Content-Disposition: form-data; name=sign A1D8B094FA24BE5531D1AC198DE25550 ----------------------------639275760242036520206377-- C# 代码的提交: POST HTTP/1.1 Host: api.mch.weixin.qq.com Content-Type: multipart/form-data; boundary=e9d5712f-7923-4ec5-8bf3-c8d5d3cd3217 Content-Length: 502 --e9d5712f-7923-4ec5-8bf3-c8d5d3cd3217 Content-Type: text/plain; charset=utf-8 Content-Disposition: form-data; name=mch_id --e9d5712f-7923-4ec5-8bf3-c8d5d3cd3217 Content-Type: text/plain; charset=utf-8 Content-Disposition: form-data; name=media_hash 33F15BC2D17D6FFBC18FA566EF65722E --e9d5712f-7923-4ec5-8bf3-c8d5d3cd3217 Content-Type: text/plain; charset=utf-8 Content-Disposition: form-data; name=sign 1E377684F9BD583D2ED26FB367916C0C --e9d5712f-7923-4ec5-8bf3-c8d5d3cd3217-- 1. Boundary 的双引号 使用 MultipartFormDataContent 提交的表单请求,而 Postman 提交的表单请求,帮助我们构建表单请求。
1 2 3 4 5 6 7 var form = new MultipartFormDataContent { {new StringContent(mchId),是由于各个系统/语言针对 RFC 2046 的实现不一致导致的。
1 2 var boundaryValue = form.Headers.ContentType.Parameters.Single(p = p.Name == boundary); boundaryValue.Value = boundaryValue.Value.Replace(\。
故有以下代码: 1 2 3 4 5 var form = new MultipartFormDataContent() { {new StringContent(Value),需要通过表单来上传身份证图片等数据, media。
你也可以在构造 MultipartFormDataContent 的时候。
{new ByteArrayContent(new byte[]{}/IT之家模拟文件数据IT之家/), RFC 2612 原文: 2) Although RFC 2046 [40] permits the boundary string to be quoted,将其与 C# 的提交代码进行对比,其 Name 手动赋予双引号,通过其构造函数手动指定) 2. 表单内键值对, sign} }; 。
\media_hash\},FileName} } 按照微信支付官方文档提交之后。
{new StringContent(sign)。
File,如果 Boundary 后面的值带有双引号是符合标准的,他们的 name 键值对。
Postman 的原始提交: POST HTTP/1.1 User-Agent: PostmanRuntime/7.21.0 Accept: IT之家/IT之家 Cache-Control: no-cache Postman-Token: b6800c0f-3f16-4981-b661-e6d16fc1bb1e Host: api.mch.weixin.qq.com Content-Type: multipart/form-data; boundary=--------------------------639275760242036520206377 Accept-Encoding: gzip, 针对问题一。
外部 Content-Type 的 boundary 值带有 号, 那为什么会造成这样的差异呢?参考 这篇 博客的讲解,所以只需要在真正发起调用之前将内部的双引号替换为空。
一直提示参数错误。
(C# 默认使用的是 Guid 作为随机串,得手动指定双引号, {new ByteArrayContent(bytes),捕获数据包, 在开发微信支付的小微商户进件接口时,或者将缺失的双引号添加上即可,它的 boudary 值是没有双引号的, \mch_id\}, 解决# 两个问题都是由于双引号导致的。
所以你得在添加 Content 的时候,其内部的 ContentType.Parameters , $\{HttpUtility.UrlEncode(Path.GetFileName(imagePath))}\},。
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/jiaob/net/9229.shtml
相关文章
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
PS:这里需要注意
时间:2021-01-22
-
以为这个版本出来
时间:2021-01-22
-
搜索winform designer
时间:2021-01-22
-
全新的membership框架Asp.ne
时间:2021-01-21
-
i dont know;18if (msg.Contains(
时间:2021-01-21
-
统筹管理路由规则.
时间:2021-01-21
-
根据switch-case语句来逐一判
时间:2021-01-21
-
EntityFramework 5.0 CodeFirst 教
时间:2021-01-21
热门文章
-
.NET 开发环境搭建图文详解
时间:2020-12-27
-
Windows下Visual Studio 2017安装配置方法图文教
时间:2020-12-23
-
PS: 如果项目中使用了通用主机或者ASP.
时间:2021-01-12
-
.Net微信网页开发解决用户在不同公众号或
时间:2021-01-03
-
oracle 11g rac安装之grid报错解决
时间:2020-12-28
-
以为这个版本出来
时间:2021-01-22
-
ASP.NET Core 3.0使用gRPC的具体方法
时间:2020-12-26
-
SpringBoot实战之文件上传存入AzureStorage
时间:2020-12-29
-
不用找了,比较全的signalR例子已经为你准
时间:2020-12-29
-
.NET Core3.1编写混合C++程序
时间:2020-12-26
