请求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);}}
(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);}});