C#调用接口的方式有哪些

网友投稿 162 2024-02-03


C#调用接口的方式有哪些

本文讲解"C#调用接口的方式有哪些",希望能够解决您遇到的有关问题,下面我们来看这篇 "C#调用接口的方式有哪些" 文章。

在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用,所以首先需要通过调用登录接口来保存cookie值,再进行其他接口的调用

1.通过Get方式

#region get方式         public string HttpGet(string url)         {             Encoding encoding = Encoding.UTF8;             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);             request.Method = "GET";             request.ContentType = "application/json";             request.Headers["Accept-Encoding"] = "gzip,deflase";             request.AutomaticDecompression = DecompressionMethods.GZip;             HttpWebResponse response = (HttpWebResponse)request.GetResponse();             // HttpCookie cookies = new HttpCookie("admin");  //如果有需要通过登录实现保存cookie值的话可以加一部分             // cookies.Value = Convert.ToString(response.Headers["Set-Cookie"]); // 通过响应请求读取带cookie的http数据             // cookies.Expires = DateTime.Now.AddDays(1);             //  HttpContext.Current.Response.Cookies.Add(cookies);             using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))             {                 return reader.ReadToEnd();             }         }         #endregion

但是并不是所有的get请求都需要添加这个heard的内容,有些加了这个可能出现乱码的情况,所以不要设置Accept-Encoding的Header

此处之所以加此header,是因为看到网页分析工具中所得到的浏览器浏览该网页,对应的http的header的内容中,就是这样设置的。

所以,代码中,也是模拟浏览器去访问网页,就设置了对应的Accept-Encoding为gzip,deflate了

普通浏览器访问网页,之所以添加:"Accept-Encoding" = "gzip,deflate"

那是因为,浏览器对于从服务器中返回的对应的gzip压缩的网页,会自动解压缩,所以,其request的时候,添加对应的头,表明自己接受压缩后的数据。

同时添加了 request.AutomaticDecompression = DecompressionMethods.GZip;这一句,便可以获得正确的数据。

如果你获取网页内容太大的话,那么还是可以用这个办法的,这样就可以让HttpWebRequest自动帮你实现对应的解压缩了,可以减少数据数据传输量,节省时间,提高效率。

2.通过post方式

public string HttpPost2(string url, string body) {    //把用户传过来的数据转成“UTF-8”的字节流     Encoding encoding = Encoding.UTF8;     //先根据用户请求的uri构造请求地址     //创建Web访问对象     HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);     request.Method = "POST";     // request.Accept = "application/json";    request.ContentType = "application/json; charset=UTF-8";    request.Headers["Accept-Encoding"] = "gzip, deflate";    request.AutomaticDecompression = DecompressionMethods.GZip;    //HttpCookie Cookie = System.Web.HttpContext.Current.Request.Cookies["admin"];  //若是需要登录过后再能访问获取url的数据,需要在请求头中设置cookie值    //if (Cookie != null)    //    request.Headers.Add("Cookie", Cookie.Value.ToString());    byte[] buffer = encoding.GetBytes(body);    request.ContentLength = buffer.Length;    request.GetRequestStream().Write(buffer, 0, buffer.Length);    //通过Web访问对象获取响应内容    HttpWebResponse response = (HttpWebResponse) request.GetResponse();    //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快    using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))    {     return reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾    }  }

3.通过put请求

#region Put请求         public string Put(string data, string uri)         {//创建Web访问对象             HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(uri);             //把用户传过来的数据转成“UTF-8”的字节流             byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);             Request.Method = "PUT";             Request.ContentLength = buf.Length;             Request.ContentType = "application/json";             Request.MaximumAutomaticRedirections = 1;             Request.AllowAutoRedirect = true;             //发送请求             Stream stream = Request.GetRequestStream();             stream.Write(buf, 0, buf.Length);             stream.Close();             //获取接口返回值             //通过Web访问对象获取响应内容             HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();             //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快             StreamReader reader = new StreamReader(Response.GetResponseStream(), Encoding.UTF8);             //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法             string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾             reader.Close();             Response.Close();             return returnXml;         }                    #endregion

4.通过Delete请求

#region Delete请求         public string Delete(string data, string uri)         {             //创建Web访问对象             HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(uri);             //把用户传过来的数据转成“UTF-8”的字节流             byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);             Request.Method = "DELETE";             Request.ContentLength = buf.Length;             Request.ContentType = "application/json";             Request.MaximumAutomaticRedirections = 1;             Request.AllowAutoRedirect = true;             //发送请求             Stream stream = Request.GetRequestStream();             stream.Write(buf, 0, buf.Length);             stream.Close();             //获取接口返回值             //通过Web访问对象获取响应内容             HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();             //通过响应内容流创建StreamReader对象,因为StreamReader更高级更快             StreamReader reader = new StreamReader(Response.GetResponseStream(), Encoding.UTF8);             //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有编码问题就用这个方法             string returnXml = reader.ReadToEnd();//利用StreamReader就可以从响应内容从头读到尾             reader.Close();             Response.Close();             return returnXml;         }        #endregion

不同的场景需求,使用不同的方式,应用在不同的场景 。

通过这几种组合方式 ,可以调用http接口,完成调用和测试。

编程技术 和 程序设计

BeanUtils.copyProperties()所有的空值不复制问题怎么解决:本文讲解"BeanUtils.copyProperties()所有的空值不复制问题如何解决",希望能够解决您遇到的有关问题,下面我们来看这篇 "BeanUti ...


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C#接口指的是什么
下一篇:C#中接口(Interface)的深入详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~