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>
原文地址:https://www.cnblogs.com/lkc9/p/11008410.html