目前所了解的請求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); } }
(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(); }
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; } }
調用的使用方法
(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); }
(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); }
頁面通過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); } });