一、GET请求
using (var client = new WebClient()) { var responseString = client.DownloadString("http://www.example.com/Test?name=test"); }
二、POST请求
using (var client = new WebClient()) { var values = new NameValueCollection(); values["x"] = "106.312859432537"; values["y"] = "29.6603971422907"; var response = client.UploadValues("http://173.12.1.30:7654/baiducoordinate/Coordinates.asmx/baidutowgs84", values); var responseString = Encoding.Default.GetString(response); }
三、POST提交文件
/// <summary> /// 上传文件 /// </summary> /// <param name="uriStr">服务器网址</param> /// <param name="name">http报文头中name</param> /// <param name="fileName">文件名</param> /// <param name="data">文件数据</param> /// <param name="offset">文件数据起始位置</param> /// <param name="count">文件数据长度</param> /// <returns></returns> static public string UploadFile(string uriStr, string name, string fileName, byte[] data, int offset, int count) { try { var request = WebRequest.Create(uriStr); request.Method = "POST"; var boundary = $"******{DateTime.Now.Ticks}***"; request.ContentType = $"multipart/form-data; boundary={boundary}"; boundary = $"--{boundary}"; using (var requestStream = request.GetRequestStream()) { var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine); requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.ASCII.GetBytes($"Content-Disposition: form-data; name="{name}"; filename="{fileName}"{Environment.NewLine}"); //写入文件的key requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.ASCII.GetBytes($"Content-Type: application/octet-stream{Environment.NewLine}{Environment.NewLine}"); //写入文件的value requestStream.Write(buffer, 0, buffer.Length); requestStream.Write(data, offset, count); buffer = Encoding.ASCII.GetBytes($"{Environment.NewLine}{boundary}--"); requestStream.Write(buffer, 0, buffer.Length); } using (var response = request.GetResponse()) using (var responseStream = response.GetResponseStream()) using (var streamReader = new StreamReader(responseStream)) { return streamReader.ReadToEnd(); } } catch { return null; } }
下面是我使用的示例:
①后端代码
public JsonNetResult GetGraphicsByShp() { try { var file = Request.Files[0]; if (file == null) { return JsonNetResult.Error("请选择文件!"); } var fileExtension = Path.GetExtension(file.FileName);//文件的扩展名称 if (fileExtension != ".zip") { return JsonNetResult.Error("请选择.zip文件后重试!"); } //调用python后台,解析shp文件 var request = WebRequest.Create("http://localhost:50979/app/upfile/"); request.Method = "POST"; var boundary = $"******{DateTime.Now.Ticks}***"; request.ContentType = $"multipart/form-data; boundary={boundary}"; boundary = $"--{boundary}"; using (var requestStream = request.GetRequestStream()) { var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine); requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.ASCII.GetBytes($"Content-Disposition: form-data; name="myfile"; filename="{file.FileName}"{Environment.NewLine}"); requestStream.Write(buffer, 0, buffer.Length); buffer = Encoding.ASCII.GetBytes($"Content-Type: application/octet-stream{Environment.NewLine}{Environment.NewLine}"); requestStream.Write(buffer, 0, buffer.Length); using(var fileStream = file.InputStream) { byte[] fileBuffer = new Byte[checked((uint)Math.Min(4096,(int)fileStream.Length))]; int lenOfbytesRead = 0; while ((lenOfbytesRead = fileStream.Read(fileBuffer, 0, buffer.Length)) != 0) { requestStream.Write(fileBuffer, 0, lenOfbytesRead); } } //requestStream.Write(data, offset, count); buffer = Encoding.ASCII.GetBytes($"{Environment.NewLine}{boundary}--"); requestStream.Write(buffer, 0, buffer.Length); } using (var response = request.GetResponse()) using (var responseStream = response.GetResponseStream()) using (var streamReader = new StreamReader(responseStream)) { string res = streamReader.ReadToEnd(); return JsonNetResult.Success(res); } } catch(Exception e) { return JsonNetResult.Error(e.Message); } }
②前台代码
<body> <form enctype="multipart/form-data" action="http://localhost:50979/GCJBXX/GetGraphicsByShp" method="post"> <input type="file" name="myfile" /> <br /> <input type="submit" value="upload" /> </form> </body>