請求WebApi的幾種方式

請求WebApi的幾種方式

目前所了解的請求WebAPI的方式有通過后臺訪問api 和通過js 直接訪問api接口

首先介紹下通過后臺訪問api的方法,可以使用HttpClient的方式也可以使用WebRequest的方式

1、HttpClient的方式

  (1)Get請求

        string url = "http://10.1.1.1:8080/";public ActionResult GetAll(){HttpClient client = new HttpClient();client.BaseAddress = new Uri(url);client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));HttpResponseMessage response = client.GetAsync("api/goods/getlist?pageindex=0&pagesize=10").Result;  // Blocking call(阻塞調用)! var result = "";if (response.IsSuccessStatusCode){result = response.Content.ReadAsStringAsync().Result;JavaScriptSerializer Serializer = new JavaScriptSerializer();var items = Serializer.DeserializeObject(result);return Json(items);}else{return Json(result);}} 
View Code

  (2)Post請求

        [HttpPost]public ActionResult AddGood(string paramObj){HttpClient client = new HttpClient();client.BaseAddress = new Uri(url);JavaScriptSerializer jss = new JavaScriptSerializer();var item = jss.Deserialize<Good>(paramObj);var content = new FormUrlEncodedContent(new Dictionary<string, string>()       {    {"Id","382accff-57b2-4d6e-ae84-a61e00a3e3b5"},{"Category","111"}});client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));HttpResponseMessage response = client.PostAsync("api/goods/add", content).Result;var result = "";if (response.IsSuccessStatusCode){result = response.Content.ReadAsStringAsync().Result;JavaScriptSerializer Serializer = new JavaScriptSerializer();var items = Serializer.DeserializeObject(result);return Json(items);}return View();}    
View Code

2、WebRequest的方式(該方式是post請求的時候傳入json字符串轉換成流的形式,無需再將json轉換成需要的實體對象了)

所以這種方式只需寫一個公共的方法,每次調用的時候傳入地址和參數即可

公共方法如下:

    public class WebRequestHelper{public static string GetRequest(string url){string responseStr = string.Empty;WebRequest request = WebRequest.Create(url);request.Method = "Get";var response = request.GetResponse();Stream ReceiveStream = response.GetResponseStream();using (StreamReader stream = new StreamReader(ReceiveStream, Encoding.UTF8)){responseStr = stream.ReadToEnd();}return responseStr;}public static string PostRequest(string url, string postParameter){string responseStr = string.Empty;WebRequest request = WebRequest.Create(url);request.Method = "Post";request.ContentType = "application/json";byte[] requestData = System.Text.Encoding.UTF8.GetBytes(postParameter);request.ContentLength = requestData.Length;Stream newStream = request.GetRequestStream();newStream.Write(requestData, 0, requestData.Length);newStream.Close();var response = request.GetResponse();Stream ReceiveStream = response.GetResponseStream();using (StreamReader stream = new StreamReader(ReceiveStream, Encoding.UTF8)){responseStr = stream.ReadToEnd();}return responseStr;}/// <summary>/// Http的 WebRequest的特定實現/// </summary>/// <param name="Url"></param>/// <param name="JSONData"></param>/// <returns></returns>public static string GetResponseData(string Url, string JSONData){byte[] bytes = Encoding.UTF8.GetBytes(JSONData);HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);request.Method = "POST";request.ContentLength = bytes.Length;request.ContentType = "application/json";Stream reqstream = request.GetRequestStream();reqstream.Write(bytes, 0, bytes.Length);//聲明一個HttpWebRequest請求  request.Timeout = 90000;//設置連接超時時間  request.Headers.Set("Pragma", "no-cache");HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream streamReceive = response.GetResponseStream();Encoding encoding = Encoding.UTF8;StreamReader streamReader = new StreamReader(streamReceive, encoding);string strResult = streamReader.ReadToEnd();streamReceive.Dispose();streamReader.Dispose();return strResult;}}
View Code

調用的使用方法

  (1)Get請求

        public ActionResult GetAll(){string result = WebRequestHelper.GetRequest(url + "api/goods/getlist?pageindex=0&pagesize=10");JavaScriptSerializer Serializer = new JavaScriptSerializer();var items = Serializer.DeserializeObject(result);return Json(items);}
View Code

  (2)Post請求

        [HttpPost]public ActionResult AddGood(string paramObj){string result = WebRequestHelper.PostRequest(url + "api/goods/add", paramObj);JavaScriptSerializer Serializer = new JavaScriptSerializer();var items = Serializer.DeserializeObject(result);return Json(items);}
View Code

頁面通過jquery調用

代碼如下:

        $.ajax({type: "get",url: "/goods/getall",dataType: "json",data: null,//data: JSON.stringify({//    id: "382accff-57b2-4d6e-ae84-a61e00a3e3b6"//}),contentType: "application/json;charset-utf-8",success: function (data) {console.log(data);}});var paramObj = { Id: "382accff-57b2-4d6e-ae84-a61e00a3e3b8",Category:111};$.ajax({type: "post",url: "/goods/AddGood",dataType: "json",//data: null,
            data: JSON.stringify({paramObj: JSON.stringify(paramObj)}),contentType: "application/json;charset-utf-8",success: function (data) {console.log(data);}});
View Code

?

轉載于:https://www.cnblogs.com/xdot/p/6640182.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393351.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393351.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393351.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Django第三篇

前端反向解析 應用場景&#xff1a;通過訪問a路由&#xff0c;到達a的對應視圖函數&#xff0c;函數到達對應的前端a標簽 a標簽的路徑是b路由&#xff0c;如果我們在后端改變b路由的路徑&#xff0c;那么a標簽便無法訪問 到b路由&#xff0c;只能手動在前端改變a標簽的路徑&…

leetcode792. 匹配子序列的單詞數

給定字符串 S 和單詞字典 words, 求 words[i] 中是 S 的子序列的單詞個數。 示例: 輸入: S “abcde” words [“a”, “bb”, “acd”, “ace”] 輸出: 3 解釋: 有三個是 S 的子序列的單詞: “a”, “acd”, “ace”。 class Solution {public int numMatchingSubseq(Strin…

react context_使用React Context API-入門

react contextLets use the React Context API to change theme in an app!讓我們使用React Context API更改應用程序中的主題&#xff01; 但是首先&#xff0c;一些背景 &#xff01; &#xff1f; (But first, some context! ?) Ok terrible puns aside lets have a look …

redis本地及遠程登錄

redis默認只能localhost登錄&#xff0c;所以需要開啟遠程登錄。解決方法如下&#xff1a;一、在redis的配置文件redis.conf中&#xff0c;找到bind 127.0.0.11、去掉 #bind 127.0.0.1前面的#號注釋&#xff0c;將bind 127.0.0.1 改成了bind 0.0.0.0&#xff08;這樣不限制連接…

java初始化變量n_java中預構造函數初始化變量的屬性

在Java中,可以在調用構造函數之前初始化編程變量.public class StockGraph extends JPanel {public boolean runUpdates true;double TickMarks 18;double MiddleTick TickMarks / 2;double PriceInterval 5;double StockMaximum;double StockMinimum;Random testStockValu…

煩了

桃花飛綠水 一庭芳草圍新綠 有情芍藥含春淚 野竹上青霄 十畝藤花落古香 無力薔薇臥曉枝 我愿暫求造化力 減卻牡丹妖艷色 花非花 夢非夢 花如夢 夢似花 夢里有花 花開如夢 心非心 鏡非鏡 心如鏡 鏡似心 鏡中有心 心如明鏡 ??轉載于:https://www.cnblogs.com/langdao/p/1099281…

js圖片庫 案例

事件處理函數&#xff1a;事件處理函數的作用是&#xff0c;在特定事件發生時調用特定的JavaScript代碼。本例中想要在用戶點擊某個鏈接的時候觸發一個動作&#xff0c;所以需要使用onclick事件處理函數。 添加事件處理函數的語法&#xff1a; event"JavaScript statement…

hitchhiker部署_《 Hitchhiker的React Router v4指南》:路由配置的隱藏值

hitchhiker部署Welcome to the Hitchhiker’s Guide to React Router v4, Part IV!歡迎來到《 React Router v4旅行者指南》&#xff0c;第四部分&#xff01; Now that we’ve learned about recursive routes, let’s get back to our initial boilerplate, to avoid mixing…

亮劍:PHP,我的未來不是夢(11)

2. 再說說“必備能力”說道能力&#xff0c;很多應屆畢業生都愿意給自己的點評是“我的學習能力很強”或者是“具有良好的學習意識”等。這里存在著這樣一個誤區&#xff01;把企業當成了學校&#xff01;當成了試驗室&#xff01;把老板當成了老師&#xff01;作為用人單位&am…

leetcode457. 環形數組循環

給定一個含有正整數和負整數的環形數組 nums。 如果某個索引中的數 k 為正數&#xff0c;則向前移動 k 個索引。相反&#xff0c;如果是負數 (-k)&#xff0c;則向后移動 k 個索引。因為數組是環形的&#xff0c;所以可以假設最后一個元素的下一個元素是第一個元素&#xff0c;…

Jquery的ajax提交成功后刷新頁面

轉載于:https://www.cnblogs.com/huoxiansudi/p/6646855.html

程序員編程經驗_在沒有實際編程的情況下成為更好的程序員

程序員編程經驗In this talk, Ryan Johnson explains what was for him the invisible step to becoming a better developer.在演講中&#xff0c;瑞安約翰遜(Ryan Johnson)解釋了對他來說&#xff0c;成為更好的開發人員這一無形的步驟。 You can watch the full video on t…

粘貼復制

方法1: 方法二: 方法三: // 第三種 ios 設備和 android設備均正常,但是pc端沒有//定義函數window.Clipboard (function(window, document, navigator) { var textArea, copy; // 判斷是不是ios端 function isOS() { return navigator.userAgent.mat…

leetcode109. 有序鏈表轉換二叉搜索樹(遞歸)

給定一個單鏈表&#xff0c;其中的元素按升序排序&#xff0c;將其轉換為高度平衡的二叉搜索樹。本題中&#xff0c;一個高度平衡二叉樹是指一個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。示例:給定的有序鏈表&#xff1a; [-10, -3, 0, 5, 9],一個可能的答案是…

mxnet教程

官方教程&#xff0c;講的還行&#xff0c;我用自己的實例講解。自己如何設計網絡&#xff0c;自己的迭代器 1&#xff1a;引入module&#xff1a; import mxnet as mx import numpy as np import cv2 import matplotlib.pyplot as plt import logginglogger logging.getLogge…

web動畫_Web動畫簡介

web動畫by CodeDraken由CodeDraken Web動畫簡介 (An Introduction to Web Animations) In this introduction to web animations article, we will cover basic CSS animations using pseudo-classes, transitions, and transformations.在此Web動畫簡介中&#xff0c;我們將介…

java統計空間占用_JVM —— Java 對象占用空間大小計算

引用類型(reference type&#xff1a; Integer)在 32 位系統上每一個占用 4bytes(即32bit&#xff0c; 才干管理 2^324G 的內存), 在 64 位系統上每一個占用 8bytes(開啟壓縮為 4 bytes)。四. 對齊填充HotSpot 的對齊方式為 8 字節對齊。不足的須要 Padding 填充對齊&#xff0…

源于十年來的點滴積累——《變革中的思索》印行出版

源于歸國十年來的點滴積累, 集結成書的《變革中的思索》&#xff0c;日前由電子工業出版社刊印出版。 這本書共有五個章節&#xff0c;分別是解碼創新、中國智造、管理心得、我和微軟、心靈記憶——前三章偏重技術&#xff0c;更多理性的思考; 后兩章則工作生活中的所見所聞&am…

SpringBoot聲明式事務

目錄 事務的基本特征隔離級別傳播行為Transcation事務的基本特征&#xff08;ACID&#xff09; Atomic&#xff08;原子性&#xff09; 事務中包含的操作被看作一個整體的業務單元&#xff0c;這個業務單元中的操作要么全部成功&#xff0c;要么全部失敗&#xff0c;不會出現部…

leetcode1437. 是否所有 1 都至少相隔 k 個元素

給你一個由若干 0 和 1 組成的數組 nums 以及整數 k。如果所有 1 都至少相隔 k 個元素&#xff0c;則返回 True &#xff1b;否則&#xff0c;返回 False 。 示例 1&#xff1a; 輸入&#xff1a;nums [1,0,0,0,1,0,0,1], k 2 輸出&#xff1a;true 解釋&#xff1a;每個 1 …