Exemple #1
0
 /// <summary>
 /// 一个url发起异步的http请求
 /// </summary>
 /// <param name="url"></param>
 /// <param name="_query"></param>
 /// <param name="files"></param>
 /// <param name="callback"></param>
 public static void BeginPostFromDataString(string url, IWebParamData _query, PostFromDataParam <PostFileData> files, Action <string, System.Exception> callback)
 {
     BeginPostFromData(url, _query, files, (res, e) =>
     {
         Process_GetHttpResponseString(res, e, callback);
     });
 }
Exemple #2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="url"></param>
 /// <param name="_query"></param>
 /// <param name="files"></param>
 /// <returns></returns>
 public static string PostFromDataString(string url, IWebParamData _query, PostFromDataParam <PostFileData> files, IWebParamData header = null)
 {
     try
     {
         var response = PostFromData(url, _query, files, header);
         return(GetStringFromResponse(response));
     }
     catch //(Exception ex)
     {
         return("");
     }
 }
Exemple #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="url"></param>
        /// <param name="_query"></param>
        /// <param name="files"></param>
        /// <returns></returns>
        public static HttpWebResponse PostFromData(string url, IWebParamData _query, PostFromDataParam <PostFileData> files, IWebParamData header = null)
        {
            //写入请求流
            var req = BuilderRequest(url, _query, files, r =>
            {
                if (header != null)
                {
                    foreach (var kv in header)
                    {
                        r.Headers[kv.Key] = kv.Value;
                    }
                }
            });
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();

            return(res);
        }
Exemple #4
0
        /*********************** Begin Method *************************/

        /// <summary>
        /// 一个url发起异步的http请求
        /// </summary>
        /// <param name="url"></param>
        /// <param name="_query"></param>
        /// <param name="files"></param>
        /// <param name="callback"></param>
        static void BeginPostFromData(string url, IWebParamData _query, PostFromDataParam <PostFileData> files, Action <HttpWebResponse, System.Exception> callback)
        {
            ThreadPoolProviderManager.QueueUserWorkItem(() =>
            {
                try
                {
                    var req = BuilderRequest(url, _query, files, null);
                    using (var res = (HttpWebResponse)req.GetResponse())
                    {
                        callback?.Invoke(res, null);
                    }
                }
                catch (System.Exception ex)
                {
                    callback?.Invoke(null, ex);
                }
            });
        }
Exemple #5
0
        private static HttpWebRequest BuilderRequest(string url, IWebParamData _query, PostFromDataParam <PostFileData> files, Action <HttpWebRequest> BeforSendHeader)
        {
            byte[] _newlinebytes      = baseEncoding.GetBytes("\r\n");
            var    _newlinebytescount = _newlinebytes.Length;

            using (var ms = new MemoryStream())
            {
                #region 文件流


                //写入请求头参数信息,query
                StringBuilder _queryStringbuffer = new StringBuilder();

                foreach (var p in _query)
                {
                    _queryStringbuffer.Length = 0;

                    _queryStringbuffer.Append("--");
                    _queryStringbuffer.Append(ConstString.BOUNDARY);
                    _queryStringbuffer.Append("\r\n");
                    _queryStringbuffer.Append("Content-Disposition: form-data; name=\"" + p.Key + "\"\r\n\r\n");
                    _queryStringbuffer.Append(p.Value);
                    _queryStringbuffer.Append("\r\n");

                    //写入请求流
                    var data = baseEncoding.GetBytes(_queryStringbuffer.ToString());
                    ms.Write(data, 0, data.Length);
                }

                if (files != null)
                {
                    #region 写文件


                    //写文件
                    foreach (var f in files)
                    {
                        var file = f.Value;
                        if (!file.IsHasFile)
                        {
                            continue;
                        }


                        _queryStringbuffer.Length = 0;

                        _queryStringbuffer.Append("--");
                        _queryStringbuffer.Append(ConstString.BOUNDARY);
                        _queryStringbuffer.Append("\r\n");
                        _queryStringbuffer.Append("Content-Disposition:form-data;name=\"" + f.Key + "\";filename=\"" + file.FileName + "\"\r\n");
                        _queryStringbuffer.Append("Content-Type:application/octet-stream\r\n\r\n");


                        //写入请求流
                        var data = baseEncoding.GetBytes(_queryStringbuffer.ToString());
                        ms.Write(data, 0, data.Length);

                        file.WriteTo(ms);

                        //写入更新的换行符
                        ms.Write(_newlinebytes, 0, _newlinebytescount);
                    }
                    ;

                    #endregion
                }

                #endregion

                //写入结束标记

                //byte[] end_data = ("--" +   BOUNDARY + "--\r\n").getBytes();//数据结束标志
                byte[] end_data = baseEncoding.GetBytes($"--" + ConstString.BOUNDARY + "--\r\n");//数据结束标志

                ms.Write(end_data, 0, end_data.Length);



                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
                req.Method        = "post";
                req.ContentLength = ms.Length;
                req.ContentType   = ConstString.MULTIPART_FORM_DATAContextType;

                BeforSendHeader?.Invoke(req);


                using (var req_stream = req.GetRequestStream())
                {
                    if (ms.CanSeek)
                    {
                        ms.Position = 0;
                    }
                    ms.CopyTo(req_stream);
                    req_stream.Flush();

                    return(req);
                }
            }
        }