使用下面的方法就可以在上传文件的同时附带请求参数传递。方法内的部分请求参数可能需要修改。

	    /// <summary>
        /// 文件上传
        /// </summary>
        /// <param name="filePath">文件路径</param>
        /// <param name="stringDict">其他参数键值集合</param>
        /// <returns>响应数据</returns>
        public static string HttpPostData(string filePath, NameValueCollection stringDict)
        {
            string url = @"http://" + ip + ":" + port + "/" + api + "/fileUpload";///拼接你的文件上传接口路径

                string responseContent;
                var memStream = new MemoryStream();
                var webRequest = (HttpWebRequest)WebRequest.Create(url);
                // 边界符
                var boundary = "---------------" + DateTime.Now.Ticks.ToString("x");
                // 边界符
                var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
                var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                // 最后的结束符
                var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n");

                // 设置属性
                webRequest.Method = "POST";
                webRequest.Timeout = 600000;
                webRequest.ContentType = "multipart/form-data; boundary=" + boundary;

                // 写入文件    filename可能需要根据你的接口接收参数名称修改
                const string filePartHeader =
                    "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" +
                     "Content-Type: application/octet-stream\r\n\r\n";
                //var header = string.Format(filePartHeader, fileKeyName, filePath);
                var header = string.Format(filePartHeader, "file", filePath);
                var headerbytes = Encoding.UTF8.GetBytes(header);


                memStream.Write(beginBoundary, 0, beginBoundary.Length);
                memStream.Write(headerbytes, 0, headerbytes.Length);


                var buffer = new byte[1024];
                int bytesRead; // =0


                while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    memStream.Write(buffer, 0, bytesRead);
                }


                // 写入字符串的Key
                var stringKeyHeader = "\r\n--" + boundary +
                                       "\r\nContent-Disposition: form-data; name=\"{0}\"" +
                                       "\r\n\r\n{1}\r\n";
                foreach (byte[] formitembytes in from string key in stringDict.Keys
                                                 select string.Format(stringKeyHeader, key, stringDict[key])
                                                     into formitem
                                                     select Encoding.UTF8.GetBytes(formitem))
                {
                    memStream.Write(formitembytes, 0, formitembytes.Length);
                }


                // 写入最后的结束边界符
                memStream.Write(endBoundary, 0, endBoundary.Length);


                webRequest.ContentLength = memStream.Length;


                var requestStream = webRequest.GetRequestStream();


                memStream.Position = 0;
                var tempBuffer = new byte[memStream.Length];
                memStream.Read(tempBuffer, 0, tempBuffer.Length);
                memStream.Close();


                requestStream.Write(tempBuffer, 0, tempBuffer.Length);
                requestStream.Close();


                var httpWebResponse = (HttpWebResponse)webRequest.GetResponse();


                using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(),
                                                                Encoding.GetEncoding("utf-8")))
                {
                    responseContent = httpStreamReader.ReadToEnd();
                }


                fileStream.Close();
                httpWebResponse.Close();
                webRequest.Abort();
                return responseContent;
            }/// <summary>
        /// 文件上传
        /// </summary>
        /// <param name="filePath">文件路径</param>
        /// <param name="stringDict">其他参数键值集合</param>
        /// <returns>响应数据</returns>
        public static string HttpPostData(string filePath, NameValueCollection stringDict)
        {
            string url = @"http://" + ip + ":" + port + "/" + api + "/fileUpload";///拼接你的文件上传接口路径

                string responseContent;
                var memStream = new MemoryStream();
                var webRequest = (HttpWebRequest)WebRequest.Create(url);
                // 边界符
                var boundary = "---------------" + DateTime.Now.Ticks.ToString("x");
                // 边界符
                var beginBoundary = Encoding.ASCII.GetBytes("--" + boundary + "\r\n");
                var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                // 最后的结束符
                var endBoundary = Encoding.ASCII.GetBytes("--" + boundary + "--\r\n");

                // 设置属性
                webRequest.Method = "POST";
                webRequest.Timeout = 600000;
                webRequest.ContentType = "multipart/form-data; boundary=" + boundary;

                // 写入文件    filename可能需要根据你的接口接收参数名称修改
                const string filePartHeader =
                    "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" +
                     "Content-Type: application/octet-stream\r\n\r\n";
                //var header = string.Format(filePartHeader, fileKeyName, filePath);
                var header = string.Format(filePartHeader, "file", filePath);
                var headerbytes = Encoding.UTF8.GetBytes(header);


                memStream.Write(beginBoundary, 0, beginBoundary.Length);
                memStream.Write(headerbytes, 0, headerbytes.Length);


                var buffer = new byte[1024];
                int bytesRead; // =0


                while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    memStream.Write(buffer, 0, bytesRead);
                }


                // 写入字符串的Key
                var stringKeyHeader = "\r\n--" + boundary +
                                       "\r\nContent-Disposition: form-data; name=\"{0}\"" +
                                       "\r\n\r\n{1}\r\n";
                foreach (byte[] formitembytes in from string key in stringDict.Keys
                                                 select string.Format(stringKeyHeader, key, stringDict[key])
                                                     into formitem
                                                     select Encoding.UTF8.GetBytes(formitem))
                {
                    memStream.Write(formitembytes, 0, formitembytes.Length);
                }


                // 写入最后的结束边界符
                memStream.Write(endBoundary, 0, endBoundary.Length);


                webRequest.ContentLength = memStream.Length;


                var requestStream = webRequest.GetRequestStream();


                memStream.Position = 0;
                var tempBuffer = new byte[memStream.Length];
                memStream.Read(tempBuffer, 0, tempBuffer.Length);
                memStream.Close();


                requestStream.Write(tempBuffer, 0, tempBuffer.Length);
                requestStream.Close();


                var httpWebResponse = (HttpWebResponse)webRequest.GetResponse();


                using (var httpStreamReader = new StreamReader(httpWebResponse.GetResponseStream(),
                                                                Encoding.GetEncoding("utf-8")))
                {
                    responseContent = httpStreamReader.ReadToEnd();
                }


                fileStream.Close();
                httpWebResponse.Close();
                webRequest.Abort();
                return responseContent;
            }