C# POST multipart/form-data 方式提交数据
一.提交方法
/// <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 方式提交数据的更多相关文章
- 关于AJAX与form表单提交数据的格式
一 form表单传输文件的格式: 只有三种: multipart/form-data 一般用于传输文件,图片文件或者其他的. 那么其中我们默认的是application/x-www-form-urle ...
- 苹果微信浏览器不能post方式提交数据问题
form表单中采用post方式提交数据时,在苹果的微信浏览器中无法传递,安卓的可以 如图: 在controller中获取该数据为 null 将表单的提交方式修改为get就能够获取到 现在采用Ajax方 ...
- Android 采用post方式提交数据到服务器
接着上篇<Android 采用get方式提交数据到服务器>,本文来实现采用post方式提交数据到服务器 首先对比一下get方式和post方式: 修改布局: <LinearLayout ...
- Android(java)学习笔记213:开源框架post和get方式提交数据(qq登录案例)
1.前面提到Http的get/post方式 . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2.Android应用会经常使用http协议进行传输,网上会有很完善 ...
- Android 使用Post方式提交数据(登录)
在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持. 在HTTP通信中使用最多的就是GET和POS ...
- js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题
js模拟form表单提交数据, js模拟a标签点击跳转,避开使用window.open引起来的浏览器阻止问题 js模拟form表单提交数据源码: /** * js模拟form表单提交 * @param ...
- Android 使用Post方式提交数据
在Android中,提供了标准Java接口HttpURLConnection和Apache接口HttpClient,为客户端HTTP编程提供了丰富的支持. 在HTTP通信中使用最多的就是GET和POS ...
- thinkPHP5.0使用form表单提交数据和删除文章,不用TP的提示页面,使用弹出提示信息
form表单提交数据和删除文章时,TP的默认信息提示页面的看起来不是很好看,想要实现弹窗提示怎么做呢? 前端:可以使用前端的一个知识--iframe,iframe元素会创建包含另外一个文档的内联框架: ...
- Android(java)学习笔记156:开源框架post和get方式提交数据(qq登录案例)
1. 前面提到Http的get/post方式 . HttpClient方式,实际工作的时候不常用到,因为这些方式编写代码是很麻烦的 2. Android应用会经常使用http协议进行传输,网上会有很 ...
- postman 中post方式提交数据
post方式提交数据时,把参数填写在body中而不是pOST下面的哪一行
随机推荐
- idea的小tip
1. 校验正则表达式 String类型的matches方法中键入option+return选择 check regexp可以测试正则的正确性
- The first python article
Smile is the most beautiful language! and Python so on !
- logback-spring.xml配置说明
logback-spring.xml的配置说明 <?xml version="1.0" encoding="UTF-8"?> <configu ...
- 头条二面:宕机后,Redis如何实现快速恢复?
Redis作为非常火热的内存数据库,其除了具有非常高的性能之外,还需要保证高可用,在故障发生时,尽可能地降低故障带来的影响,Redis也提供了完善的故障恢复机制:哨兵.下面就来具体来看看Redis的故 ...
- 高德地图poi关键字搜索-vue+ant-design
最近有个需求,需要输入上车点,下车点,然后输入上车点的时候还要在下方显示地图附近的车辆.百度了一波之后,完全莫得头绪,很多代码也都用不了,即便改了之后也不怎么生效.我用的是jeecg-boot.最后静 ...
- iOS新建项目基础设置
我们新建项目工程的时候一般都需要配置些基本设置,以下是我整理的一些基础配置 一: pch文件的设置 pch:预编译头文件,这个文件会被编译存储在一个缓存空间,并自动有且只有一次包含在每个文件 ...
- AngularJS UI
1, angular ui 自定义弹框 <script type="text/ng-template" id="stackedModal.html"> ...
- java问题解答
因为子类继承自父类,会沿用父类的东西(没被覆盖的函数以及可见的成员变量等),而这些东西子类是没有的,需要先初始化父类才能被使用 子类构造方法中调用父类构造方法,一个作用是可以给父类构造方法传递实参,给 ...
- We've detected suspicious behavior from phone numbers similar to yours. Please try again later or contact us through our help center at help.openai.com.
原因 很多人使用该地区号码,被限制住了 解决办法 过会儿再试,或者换个地区接码
- interpreting non ascii codepoint
ProtoBuf 在Windows VS2019 C++平台上的使用 这两天想着了解一下protobuf,搜索了一篇博客照着弄了一下 https://blog.csdn.net/weixin_4478 ...