【接口】-请求WebApi的2种方式

来源:互联网 发布:oracle数据库代理商 编辑:程序博客网 时间:2024/04/28 00:02

方式一:通过后台访问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);
        }


方式二:通过js 直接访问api接口,页面通过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);
            }
        });