• 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>
  • 相关阅读:
    Linux安装oracle 10g常见问题之——ORA-01078,LRM-00109,ORA-01102
    Linux安装oracle 10g常见问题之——OUI-25031
    C#中static静态变量的用法
    让DIV中的内容水平和垂直居中
    json对象与json字符串互换
    AJAX请求 $.post方法的使用
    .NET(c#)new关键字的三种用法
    创建数据库和表的SQL语句
    SQL、LINQ、Lambda 三种用法(转)
    AJAX中UPDATEPANEL配合TIMER控件实现局部无刷新
  • 原文地址:https://www.cnblogs.com/lkc9/p/11008410.html
Copyright © 2020-2023  润新知