C#中发起GET和POST请求的方法
一、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>