溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#調(diào)用接口的方式有哪些

發(fā)布時(shí)間:2022-06-16 10:37:33 來(lái)源:億速云 閱讀:266 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇“C#調(diào)用接口的方式有哪些”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“C#調(diào)用接口的方式有哪些”文章吧。

在用C#調(diào)用接口的時(shí)候,遇到需要通過(guò)調(diào)用登錄接口才能調(diào)用其他的接口,因?yàn)樵谄渌慕涌谛枰诘卿浀臓顟B(tài)下保存Cookie值才能有權(quán)限調(diào)用,所以首先需要通過(guò)調(diào)用登錄接口來(lái)保存cookie值,再進(jìn)行其他接口的調(diào)用

1.通過(guò)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");  //如果有需要通過(guò)登錄實(shí)現(xiàn)保存cookie值的話可以加一部分
            // cookies.Value = Convert.ToString(response.Headers["Set-Cookie"]); // 通過(guò)響應(yīng)請(qǐng)求讀取帶cookie的http數(shù)據(jù)
            // 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請(qǐng)求都需要添加這個(gè)heard的內(nèi)容,有些加了這個(gè)可能出現(xiàn)亂碼的情況,所以不要設(shè)置Accept-Encoding的Header

此處之所以加此header,是因?yàn)榭吹骄W(wǎng)頁(yè)分析工具中所得到的瀏覽器瀏覽該網(wǎng)頁(yè),對(duì)應(yīng)的http的header的內(nèi)容中,就是這樣設(shè)置的。

所以,代碼中,也是模擬瀏覽器去訪問(wèn)網(wǎng)頁(yè),就設(shè)置了對(duì)應(yīng)的Accept-Encoding為gzip,deflate了

普通瀏覽器訪問(wèn)網(wǎng)頁(yè),之所以添加:"Accept-Encoding" = "gzip,deflate"

那是因?yàn)椋瑸g覽器對(duì)于從服務(wù)器中返回的對(duì)應(yīng)的gzip壓縮的網(wǎng)頁(yè),會(huì)自動(dòng)解壓縮,所以,其request的時(shí)候,添加對(duì)應(yīng)的頭,表明自己接受壓縮后的數(shù)據(jù)。

同時(shí)添加了 request.AutomaticDecompression = DecompressionMethods.GZip;這一句,便可以獲得正確的數(shù)據(jù)。

如果你獲取網(wǎng)頁(yè)內(nèi)容太大的話,那么還是可以用這個(gè)辦法的,這樣就可以讓HttpWebRequest自動(dòng)幫你實(shí)現(xiàn)對(duì)應(yīng)的解壓縮了,可以減少數(shù)據(jù)數(shù)據(jù)傳輸量,節(jié)省時(shí)間,提高效率。

2.通過(guò)post方式

public string HttpPost2(string url, string body)
{

   //把用戶傳過(guò)來(lái)的數(shù)據(jù)轉(zhuǎn)成“UTF-8”的字節(jié)流
    Encoding encoding = Encoding.UTF8;
    //先根據(jù)用戶請(qǐng)求的uri構(gòu)造請(qǐng)求地址
    //創(chuàng)建Web訪問(wèn)對(duì)象
    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"];  //若是需要登錄過(guò)后再能訪問(wèn)獲取url的數(shù)據(jù),需要在請(qǐng)求頭中設(shè)置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);
   //通過(guò)Web訪問(wèn)對(duì)象獲取響應(yīng)內(nèi)容
   HttpWebResponse response = (HttpWebResponse) request.GetResponse();
   //通過(guò)響應(yīng)內(nèi)容流創(chuàng)建StreamReader對(duì)象,因?yàn)镾treamReader更高級(jí)更快
   using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
   {
    return reader.ReadToEnd();//利用StreamReader就可以從響應(yīng)內(nèi)容從頭讀到尾
   }
 }

3.通過(guò)put請(qǐng)求

        #region Put請(qǐng)求
        public string Put(string data, string uri)
        {//創(chuàng)建Web訪問(wèn)對(duì)象
            HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(uri);
            //把用戶傳過(guò)來(lái)的數(shù)據(jù)轉(zhuǎn)成“UTF-8”的字節(jié)流
            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;
            //發(fā)送請(qǐng)求
            Stream stream = Request.GetRequestStream();
            stream.Write(buf, 0, buf.Length);
            stream.Close();

            //獲取接口返回值
            //通過(guò)Web訪問(wèn)對(duì)象獲取響應(yīng)內(nèi)容
            HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();
            //通過(guò)響應(yīng)內(nèi)容流創(chuàng)建StreamReader對(duì)象,因?yàn)镾treamReader更高級(jí)更快
            StreamReader reader = new StreamReader(Response.GetResponseStream(), Encoding.UTF8);
            //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有編碼問(wèn)題就用這個(gè)方法
            string returnXml = reader.ReadToEnd();//利用StreamReader就可以從響應(yīng)內(nèi)容從頭讀到尾
            reader.Close();
            Response.Close();
            return returnXml;

        }           
        #endregion

4.通過(guò)Delete請(qǐng)求

        #region Delete請(qǐng)求
        public string Delete(string data, string uri)
        {
            //創(chuàng)建Web訪問(wèn)對(duì)象
            HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(uri);
            //把用戶傳過(guò)來(lái)的數(shù)據(jù)轉(zhuǎn)成“UTF-8”的字節(jié)流
            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;
            //發(fā)送請(qǐng)求
            Stream stream = Request.GetRequestStream();
            stream.Write(buf, 0, buf.Length);
            stream.Close();

            //獲取接口返回值
            //通過(guò)Web訪問(wèn)對(duì)象獲取響應(yīng)內(nèi)容
            HttpWebResponse Response = (HttpWebResponse)Request.GetResponse();
            //通過(guò)響應(yīng)內(nèi)容流創(chuàng)建StreamReader對(duì)象,因?yàn)镾treamReader更高級(jí)更快
            StreamReader reader = new StreamReader(Response.GetResponseStream(), Encoding.UTF8);
            //string returnXml = HttpUtility.UrlDecode(reader.ReadToEnd());//如果有編碼問(wèn)題就用這個(gè)方法
            string returnXml = reader.ReadToEnd();//利用StreamReader就可以從響應(yīng)內(nèi)容從頭讀到尾
            reader.Close();
            Response.Close();
            return returnXml;

        }
       #endregion

不同的場(chǎng)景需求,使用不同的方式,應(yīng)用在不同的場(chǎng)景 。

通過(guò)這幾種組合方式 ,可以調(diào)用http接口,完成調(diào)用和測(cè)試。

以上就是關(guān)于“C#調(diào)用接口的方式有哪些”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI