一.提交方法

  /// <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. 主线程 子线程 调用 ThreadId BeginInvoke调用和Invoke调用

    BeginInvoke是异步线程执行 class Program    {        static int TakeWhile() {            int threadid = Thre ...

  2. 数字图像处理之直方图处理——a cute dog huang

    关于图像处理的知识,确实很棒,在此感谢:https://blog.csdn.net/mary_0830/article/details/89003488 直方图处理概念灰度级范围为[0,L-1]的数字 ...

  3. Worksheet使用方法

    1  下载印象笔记: iPhone/iPad在App Store搜索"印象笔记"后下载 安卓在应用市场或在印象笔记官网yinxiang.com下载,图标同上 电脑可至印象笔记官网y ...

  4. 【STM32】电能表抄表功能实现|自学笔记

    一.抄表的原理 抄表就是读电能表的测量参数,一般有电能,电压,电流,实时功率,功率因数等,用单板抄表其实就是读电能表种相应寄存器中的值.智能电表目前主流协议有DLT645国标各家通用,MODBUS各家 ...

  5. react中如何正确使用setState(附例子)

    概述 setState中对于某个state多次修改,只执行一次(最后一次),所以可以将修改放在同一次中 import React, {Component} from 'react'; class De ...

  6. AngularJS UI

    1, angular ui 自定义弹框 <script type="text/ng-template" id="stackedModal.html"> ...

  7. echarts的bug

    Uncaught Error: Invalide sourceFormat: unknown at assert (util.js:404:15) at mountMethods (dataProvi ...

  8. RTT笔记-分析自动初始化机制转

    首先全局搜索一个任意的自启动宏,便能找到在rtdef.h中由如下定义 1 #define INIT_BOARD_EXPORT(fn) INIT_EXPORT(fn, "1") 2 ...

  9. axios进行图片上传

    进行图片的上传,一定要注意headers的设置:             headers:{"Content-Type":"multipart/form-data&quo ...

  10. git 与远程仓库关联返回 fatal: remote origin already exists 解决方法

    今天领导新建了一个代码仓库,我按照流程一步步推送代码,结果到了关联仓库的时候,返回 fatal: remote origin already exists(远程源已经存在) 下面是解决方法 1.删除远 ...