一.提交方法

  /// <summary>
/// MultipartFormData Post方式提交
/// </summary>
/// <param name="url"></param>
/// <param name="kVDatas"></param>
/// <param name="method"></param>
/// <param name="encoding"></param>
/// <param name="timeOut"></param>
/// <returns></returns>
public string HttpPostMultipartFormData(string url, NameValueCollection kVDatas, string method = WebRequestMethods.Http.Post, string encoding = "UTF-8", int timeOut = -1)
{
string resultStr = "";
try
{
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = Encoding.GetEncoding(encoding).GetBytes("\r\n--" + boundary + "\r\n");
byte[] endbytes = Encoding.GetEncoding(encoding).GetBytes("\r\n--" + boundary + "--\r\n"); ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072; //一定要有这一句
ServicePointManager.ServerCertificateValidationCallback = delegate(
Object obj, X509Certificate certificate, X509Chain chain,
SslPolicyErrors errors)
{
return (true);
}; //1.HttpWebRequest
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "multipart/form-data; boundary=" + boundary;
request.Method = method;
request.KeepAlive = true;
request.Timeout = timeOut; using (Stream stream = request.GetRequestStream())
{
//1.1 key/value
string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}";
if (kVDatas != null)
{
foreach (string key in kVDatas.Keys)
{
stream.Write(boundarybytes, 0, boundarybytes.Length);
string formitem = string.Format(formdataTemplate, key, kVDatas[key]);
byte[] formitembytes = Encoding.GetEncoding(encoding).GetBytes(formitem);
stream.Write(formitembytes, 0, formitembytes.Length);
}
}
stream.Write(endbytes, 0, endbytes.Length);
}
//2.WebResponse
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (StreamReader stream = new StreamReader(response.GetResponseStream()))
{
resultStr = stream.ReadToEnd(); }
} }
catch (WebException ex)
{
var errorSr = new StreamReader(ex.Response.GetResponseStream());
resultStr = errorSr.ReadToEnd();
}
return resultStr;
}

二.NameValueCollection

NameValueCollection keyData = new NameValueCollection();
keyData.Add("A","222"); 
keyData.Add("B","3333");
keyData.Add("key_words", "4444");

三.NameValueCollection 转换为json格式(先把NameValueCollection 转换为Dictionary,再把Dictionary转换为json)

     /// <summary>
/// NameValueCollection 转换为json格式
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
public IDictionary<string, string> NameVlueToDictionary(NameValueCollection source)
{
return source.AllKeys.ToDictionary(k => k, k => source[k]);
}

var keyDict =NameVlueToDictionary(keyData);

string strJSON = JsonConvert.SerializeObject(keyDict);

 

四.string转换为NameValueCollection

NameValueCollection kVDatas = HttpUtility.ParseQueryString(strUpData);

C# POST multipart/form-data 方式提交数据的更多相关文章

  1. 关于AJAX与form表单提交数据的格式

    一 form表单传输文件的格式: 只有三种: multipart/form-data 一般用于传输文件,图片文件或者其他的. 那么其中我们默认的是application/x-www-form-urle ...

  2. 苹果微信浏览器不能post方式提交数据问题

    form表单中采用post方式提交数据时,在苹果的微信浏览器中无法传递,安卓的可以 如图: 在controller中获取该数据为 null 将表单的提交方式修改为get就能够获取到 现在采用Ajax方 ...

  3. Android 采用post方式提交数据到服务器

    接着上篇<Android 采用get方式提交数据到服务器>,本文来实现采用post方式提交数据到服务器 首先对比一下get方式和post方式: 修改布局: <LinearLayout ...

  4. Android(java)学习笔记213:开源框架post和get方式提交数据(qq登录案例)

    1.前面提到Http的get/post方式  . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2.Android应用会经常使用http协议进行传输,网上会有很完善 ...

  5. Android 使用Post方式提交数据(登录)

    在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持. 在HTTP通信中使用最多的就是GET和POS ...

  6. js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题

    js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题 js模拟form表单提交数据源码: /** * js模拟form表单提交 * @param ...

  7. Android 使用Post方式提交数据

    在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持. 在HTTP通信中使用最多的就是GET和POS ...

  8. thinkPHP5.0使用form表单提交数据和删除文章,不用TP的提示页面,使用弹出提示信息

    form表单提交数据和删除文章时,TP的默认信息提示页面的看起来不是很好看,想要实现弹窗提示怎么做呢? 前端:可以使用前端的一个知识--iframe,iframe元素会创建包含另外一个文档的内联框架: ...

  9. Android(java)学习笔记156:开源框架post和get方式提交数据(qq登录案例)

    1. 前面提到Http的get/post方式  . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2. Android应用会经常使用http协议进行传输,网上会有很 ...

  10. postman 中post方式提交数据

    post方式提交数据时,把参数填写在body中而不是pOST下面的哪一行

随机推荐

  1. k8s pod 抓包

    首先安装tcpdump: yum install tcpdump kubectl get pod -o wide查看pod在哪个节点上 docker ps 查看container的id 查看pid: ...

  2. xshell拖拽文件

    直接在linux中输入命令 yum install lrzsz 安装完毕后即可拖拽文件.

  3. String和StringBuffer与StringBuilder的区别

    1.String.StringBuffer.StringBuilder都不可以被继承,在JDK中它们都被定义为final类. 2.执行速度:StringBuilder > StringBuffe ...

  4. Ubuntu下CodeBlocks控制台程序中文显示乱码解决问题

    今天在CodeBlocks下折腾来半天,终于把中文乱码给解决了,其实很简单. 在环境设置里进行如下设置:把Terminal to launch console programs那个选项改成gnome- ...

  5. 图像bayer格式介绍

    图像bayer格式介绍 https://zhuanlan.zhihu.com/p/72581663

  6. P1068 [NOIP2009 普及组] 分数线划定 题解

    目录 题目 思路 code 题目 P1068 [NOIP2009 普及组 思路 算出人数 排序 输出 如果同分也输出 否则break code #include<bits/stdc++.h> ...

  7. c中遍历lua的表

    //遍历lua表,index为表在栈中的位置 void traverse_table(lua_State* L, int index) { lua_pushnil(L); stack_dump(L); ...

  8. AD笔记总结

    原理图要点: 1.新建工程, 新建的project是要以后缀PrjPCB2.新建原理图.PCB, 右键project,进行New添加3.新建原理图库.PCB库,右键project, 进行new添加 改 ...

  9. Oracle 临时表空间暴满的原因与解决方法

    Oracle临时表空间主要用来做查询和存放一些缓冲区数据.临时表空间消耗的主要原因是需要对查询的中间结果进行排序. 重启数据库可以释放临时表空间,如果不能重启实例,而一直保持问题sql语句的执行,te ...

  10. 2022-3-8内部群每日三题-清辉PMP

    1.实践敏捷方法的开发负责人被任命为一个项目的迭代经理,该负责人与使用瀑布式方法的业务分析师密切合作,但这两个方法的差异已经开始对团队绩效产生负面影响,项目经理分别与开发负责人和业务分析师就这种情况进 ...