/// <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); }); }
/// <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(""); } }
/// <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); }
/*********************** 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); } }); }
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); } } }