/// <summary> /// httpWebRequest post by dic /// </summary> /// <param name="url">url</param> /// <param name="APIID">appid</param> /// <param name="dicParams">参数</param> /// <param name="filePath">文件路径</param> /// <param name="fileParamName">文件对应的参数名</param> /// <returns></returns> public static string httpWebRequestPost(string url, string APIID, Dictionary<string, string> dicParams, string filePath, string fileParamName) { string boundary = "ceshi"//getRandomString(32, true, true, false, false, ""); string Enter = "\r\n"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "multipart/form-data;boundary=" + boundary; Stream requestStream = request.GetRequestStream(); int dicParamsIndex = 0; #region 写入请求流 foreach (var item in dicParams) { #region 定义请求体中的内容 并转成二进制 string s = dicParamsIndex == 0 ? "" : Enter; s += "--" + boundary + Enter + "Content-Disposition: form-data; name=\"" + item.Key + "\"" + Enter + Enter + item.Value; var bytes = Encoding.UTF8.GetBytes(s);//encrypt所有字符串二进制 #endregion #region 将各个二进制 写入请求流 requestStream.Write(bytes, 0, bytes.Length); #endregion dicParamsIndex++; } #endregion #region 将文件转成二进制 if (fileParamName != "" && filePath != "") { string fileName = System.IO.Path.GetFileName(filePath); byte[] fileBytes = File.ReadAllBytes(filePath); string fileStr = Enter + "--" + boundary + Enter + "Content-Type:application/octet-stream" + Enter + "Content-Disposition: form-data; name=\"file\"; " + "filename=\"" + fileName + "\"" + Enter + Enter; var fileStrByte = Encoding.UTF8.GetBytes(fileStr);//encrypt所有字符串二进制 requestStream.Write(fileStrByte, 0, fileStrByte.Length); requestStream.Write(fileBytes, 0, fileBytes.Length); } #endregion #region 结束标签 string endStr = Enter + "--" + boundary + "--"; var endBytes = Encoding.UTF8.GetBytes(endStr); requestStream.Write(endBytes, 0, endBytes.Length); #endregion #region 发送请求 HttpWebResponse response = (HttpWebResponse)request.GetResponse();//发送 Stream responseStream = response.GetResponseStream();//获取返回值 StreamReader streamReader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8")); string responseString = streamReader.ReadToEnd(); streamReader.Close(); responseStream.Close(); #endregion return responseString; }