API-6_4 C#请求Web API

C#请求Web API

一、        C#  HTTP请求

C# 中 主要使用HttpWebRequest 类、HttpWebResponse类、 HTTP 协议和服务器交互,获取WebAPI服务。通常是通过 GET 和 POST 两种方式来 对数据进行获取和提交。

  1. 1.       HTTP Web请求类:HttpWebRequest ,继承自WebRequest类,位于System.Net命名空间

常用属性

l  Method  设置请求方式

l  Accept  设置HTTP标头的值

l  ContentType 设置内容格式

常用方法

l  Create()创建HTTP Web请求对象

l  GetResponse() 获取服务器返回的资源

l  GetRequestStream() 获取用于写入请求数据的流对象

  1. 2.       HTTP Web响应类:HttpWebResponse ,继承自WebResponse, 位于System.Net命名空间

常用方法

l  GetResponseStream()获取来自服务器响应的流对象

  1. 3.       C#、HTTP通过GET方式获取数据

通过在网络地址附加参数来完成数据的提交,如:http://example/api/user?name=aa

1)       创建HTTP Web请求对象

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost:49795/api/Student");

2)       设置请求方式

request.Method = "get";

3)       创建HTTP Web响应对象,获取服务器返回的资源

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

4)       使用流阅读器读取服务器返回的数据

StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);

             richTextBox1.Text = reader.ReadToEnd();

reader.Close();

  1. 4.       C#、HTTP通过POST方式提交数据

POST 方式通过在页面内容中填写参数的方法来完成数据的提交,参数的格式和 GET 方式一样。

这里需要通过对象序列化工具,将对象序列化为 JSON 数据,通过 POST 方式在页面内容中传递到服务器端。

可以使用 Newtonsoft.Json.dll 对数据进行序列化。

1)       准备请求的数据对象

2)       将对象序列化为JSON字符串,并将JSON字符串转为字节数组

var json = Newtonsoft.Json.JsonConvert.SerializeObject(stu);

     byte[] buffer = Encoding.UTF8.GetBytes(json);

3)       创建HTTP Web请求对象

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost:49795/api/Student");

4)       设置请求方式 、HTTP标头、内容格式

request.Method = "post";

  request.Accept = "*/*";

  request.ContentType = "application/json";

5)       提交请求,将字节数组内容写请求数据的流对象

request.GetRequestStream().Write(buffer, 0, buffer.Length);

6)       服务器应答:获取服务器返回的资源

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

7)       使用流阅读器读取服务器返回数据

using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))

            {

                richTextBox1.Text = reader.ReadToEnd();

   }

  1. 5.       制作HTTP请求助手类

Delete请求方式与Get请求方式类似都是通过地址传递参数,Put请求与POST请求方式相似都是通过Request Body提交数据,根据这两个方式我们可以将前一示例提交代码进行提炼,可以制作出一个HTTP请求的库专门用来C#请求Web API。

class HTTP_Helper

    {

        /// <summary>

        /// C#请求Get,Delete WebAPI

        /// </summary>

        /// <param name="url">请求地址</param>

        /// <param name="method">请求方式</param>

        /// <returns>服务器返回的数据字符串</returns>

        public static string HttpGet(string url, string method)

        {

            //创建HTTP Web请求对象

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);

            request.Method = method;//设置请求方法

            request.Accept = "*/*";//设置HTTP标头的值

            request.ContentType = "application/json";//设置内容格式

 

            //如果服务端应答状态码不是200系列的会触发异常

            try

            {

                //得到服务器应答

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                //使用流阅读器读取服务器返回数据

                using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))

                {

                    //全部读取服务器返回数据并返回

                    return reader.ReadToEnd();

                }

            }

            catch

            {

                return null;

            }

          

        }

 

        /// <summary>

        /// C#请求Post,Put  WebAPI

        /// </summary>

        /// <param name="url">请求地址</param>

        /// <param name="method">请求方式</param>

        /// <param name="body">请求数据内容</param>

        /// <returns>服务器返回的数据字符串</returns>

        public static string HttPost(string url, string method, string body)

        {

            //将请求内容字符串转换成byte[] 数组

            byte[] buffer = Encoding.UTF8.GetBytes(body);

            //创建HTTP Web请求对象

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);

            request.Method = method;//设置请求方法

            request.Accept = "*/*";//设置HTTP标头的值

            request.ContentType = "application/json";//设置内容格式

            //将字节序列写入请求的流中

            request.GetRequestStream().Write(buffer, 0, buffer.Length);

 

            try

            {

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))

                {

                    //全部读取服务器返回数据并返回

                    return reader.ReadToEnd();

                }

            }

            catch

            {

                return null;

            }

        }

    }

二、        WinForm请求Web API

案例:通过4个操作了解在WinForm中调用Web API的做法

 

上一篇:HttpWebRequest、WebClient、HttpClient的区别


下一篇:C#调用http请求,HttpWebRequest添加http请求头信息