C# POST multipart/form-data 方式提交数据

摘要:
I提交方法//////MultipartFormDataPost提交方法////////////˂/

一.提交方法

  /// <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("
--" + boundary + "
");
                byte[] endbytes = Encoding.GetEncoding(encoding).GetBytes("
--" + boundary + "--
");

                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}"

{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 方式提交数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CentOS 7上的进程管理thinkphp 常见问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Springcloud 学习笔记04-Springboot连接数据库

一、打开user-service微服务 启动类右键Run’UserServiceApplication’或者点击右上方启动 2 Springboot连接Mysql数据库 (1)首先我们将需要的包导入,这几个包都是我们稍后要用到的: <dependency> <groupId>mysql<...

C# 拼接字符串的几种方式和性能

开发过程中常用到的拼接字符串的方法有三种:   1 简单 “+=” 拼接法      1 2 3 4 5 string str="a";   str+="c"+"d";   string str_1="a"+"b";      首先需要明白的是string类型,string是引用类型,保留在堆上,而不是栈上,用的时候传的是内存中的地...

php string

一.字符串类型        php一共有8中数据类型        4种基本类型            boolean            integer            float(double)            string        2种符合类型            array            object       ...

android读取Resources中内容

android中资源是只读的,不可写。 下面我们来读取Assets目录和res/raw目录下的文本文件到TextView中,首先要做的就是将文件放入到这两个文件夹里 在activity_main.xml中放入两个TextView来显示文本内容 <LinearLayout xmlns:android="http://schemas.android.c...

【转】Android世界的Swift

最近Oracle又在和Google撕的厉害,才知道还有这么Kotlin在Android像Swift在Mac的地位一说。 Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作,可以...

黑马程序员----java基础--String字符串

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、String类概述 java中用String类进行描述对字符串进行了对象的封装。这样的好处是可以对字符串这种常见数据进行方便的操作。对象封装后,可以定义N多属性和行为。 String类是final的,也就是说它没有子类。 二、String字符串的特点...