WebApi(6) 后台C#调用WebApi

https://www.cnblogs.com/cxd1008/p/6640015.html

今天来写一下后台C#代码如何访问webapi 这里使用HttpClient方法访问webapi也是很常用的方法。

因为我在是webapi项目里直接写的,为了方便就直接读取了当前地址,代码包括 webapi的所有用法【Getstring GetClass GetListClass Post put Delete】。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//后台client方式GET提交
HttpClient myHttpClient =  new  HttpClient();
//提交当前地址的webapi
string  url =  "http://"  + System.Web.HttpContext.Current.Request.Url.Host +  ":"  + System.Web.HttpContext.Current.Request.Url.Port.ToString();
myHttpClient.BaseAddress =  new  Uri(url);
//GET提交 返回string
HttpResponseMessage response = myHttpClient.GetAsync( "api/ApiDemo/Get2" ).Result;
string  result =  "" ;
if  (response.IsSuccessStatusCode)
{
     result = response.Content.ReadAsStringAsync().Result;
}
//return Content(JsonConvert.SerializeObject(result));
 
Product product =  null ;
//GET提交 返回class
response = myHttpClient.GetAsync( "api/ProductsAPI/GetProduct/1" ).Result;
if  (response.IsSuccessStatusCode)
{
     product = response.Content.ReadAsAsync<Product>().Result;
}
//return Content (JsonConvert.SerializeObject(product));
 
//put 提交 先创建一个和webapi对应的类           
var  content =  new  FormUrlEncodedContent( new  Dictionary< string string >()
     {
         { "Id" , "2" },
         { "Name" , "Name:" +DateTime.Now.ToString() },
         { "Category" , "111" },
         { "Price" , "1" }
      });
response = myHttpClient.PutAsync( "api/ProductsAPI/PutProduct/2" , content).Result;
if  (response.IsSuccessStatusCode)
{
     result = response.Content.ReadAsStringAsync().Result;
}
 
 
//post 提交 先创建一个和webapi对应的类
content =  new  FormUrlEncodedContent( new  Dictionary< string string >()
     {
         { "Id" , "382accff-57b2-4d6e-ae84-a61e00a3e3b5" },
         { "Name" , "Name"  },
         { "Category" , "111" },
         { "Price" , "1" }
      });
response = myHttpClient.PostAsync( "api/ProductsAPI/PostProduct" , content).Result;
if  (response.IsSuccessStatusCode)
{
     result = response.Content.ReadAsStringAsync().Result;
}
//delete 提交
response = myHttpClient.DeleteAsync( "api/ProductsAPI/DeleteProduct/1" ).Result;
if  (response.IsSuccessStatusCode)
{
     result = response.Content.ReadAsStringAsync().Result;
}
 
//GET提交 返回List<class>
response = myHttpClient.GetAsync( "api/ProductsAPI/GetAllProducts" ).Result;
List<Product> listproduct =  new  List<Models.Product>();
if  (response.IsSuccessStatusCode)
{
     listproduct = response.Content.ReadAsAsync<List<Product>>().Result;
}
return  Content(JsonConvert.SerializeObject(listproduct));

  

 /// <summary>
        /// url请求
        /// </summary>
        /// <param name="type"></param>
        /// <param name="paramData"></param>
        /// <returns></returns>
        private static string WebRequest(string method, string type, string paramData)
        {
            string apiUrl = "http://" + ConfigHelper.GetBaseUrl("url") + "/Session";
            apiUrl = apiUrl.EndsWith("/") ? apiUrl : apiUrl + "/";

            string postUrl = string.Empty;
            if (type == "Get" || type == "Delete")
            {
                postUrl = apiUrl + method + "?" + paramData;
            }
            else
            {
                postUrl = apiUrl + method;
            }
            LogWriter.ToDebug(postUrl);
            string ret = string.Empty;

            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(paramData);
            System.Net.HttpWebRequest webReq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(new Uri(postUrl));
            webReq.Method = type;
            switch (type)
            {
                case "Post":
                    {
                        webReq.ContentLength = byteArray.Length;
                        webReq.ContentType = "application/json";
                        System.IO.Stream newStream = webReq.GetRequestStream();
                        newStream.Write(byteArray, 0, byteArray.Length); //写入参数
                        newStream.Close();
                    }
                    break;
                case "Put":
                    {
                        webReq.ContentLength = byteArray.Length;
                        webReq.ContentType = "application/x-www-form-urlencoded";
                        System.IO.Stream newStream = webReq.GetRequestStream();
                        newStream.Write(byteArray, 0, byteArray.Length); //写入参数
                        newStream.Close();
                    }
                    break;
            }

            using (System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)webReq.GetResponse())
            {
                System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);
                ret = sr.ReadToEnd();
                sr.Close();
            }

            return ret;
        }

  

本文为博主原创文章,欢迎转载,但转载须注在明显位置注明【博客地址】和【原文地址】,否则将追究法律责任。http://www.cnblogs.com/cxd1008

今天来写一下后台C#代码如何访问webapi 这里使用HttpClient方法访问webapi也是很常用的方法。

因为我在是webapi项目里直接写的,为了方便就直接读取了当前地址,代码包括 webapi的所有用法【Getstring GetClass GetListClass Post put Delete】。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//后台client方式GET提交
HttpClient myHttpClient =  new  HttpClient();
//提交当前地址的webapi
string  url =  "http://"  + System.Web.HttpContext.Current.Request.Url.Host +  ":"  + System.Web.HttpContext.Current.Request.Url.Port.ToString();
myHttpClient.BaseAddress =  new  Uri(url);
//GET提交 返回string
HttpResponseMessage response = myHttpClient.GetAsync( "api/ApiDemo/Get2" ).Result;
string  result =  "" ;
if  (response.IsSuccessStatusCode)
{
     result = response.Content.ReadAsStringAsync().Result;
}
//return Content(JsonConvert.SerializeObject(result));
 
Product product =  null ;
//GET提交 返回class
response = myHttpClient.GetAsync( "api/ProductsAPI/GetProduct/1" ).Result;
if  (response.IsSuccessStatusCode)
{
     product = response.Content.ReadAsAsync<Product>().Result;
}
//return Content (JsonConvert.SerializeObject(product));
 
//put 提交 先创建一个和webapi对应的类           
var  content =  new  FormUrlEncodedContent( new  Dictionary< string string >()
     {
         { "Id" , "2" },
         { "Name" , "Name:" +DateTime.Now.ToString() },
         { "Category" , "111" },
         { "Price" , "1" }
      });
response = myHttpClient.PutAsync( "api/ProductsAPI/PutProduct/2" , content).Result;
if  (response.IsSuccessStatusCode)
{
     result = response.Content.ReadAsStringAsync().Result;
}
 
 
//post 提交 先创建一个和webapi对应的类
content =  new  FormUrlEncodedContent( new  Dictionary< string string >()
     {
         { "Id" , "382accff-57b2-4d6e-ae84-a61e00a3e3b5" },
         { "Name" , "Name"  },
         { "Category" , "111" },
         { "Price" , "1" }
      });
response = myHttpClient.PostAsync( "api/ProductsAPI/PostProduct" , content).Result;
if  (response.IsSuccessStatusCode)
{
     result = response.Content.ReadAsStringAsync().Result;
}
//delete 提交
response = myHttpClient.DeleteAsync( "api/ProductsAPI/DeleteProduct/1" ).Result;
if  (response.IsSuccessStatusCode)
{
     result = response.Content.ReadAsStringAsync().Result;
}
 
//GET提交 返回List<class>
response = myHttpClient.GetAsync( "api/ProductsAPI/GetAllProducts" ).Result;
List<Product> listproduct =  new  List<Models.Product>();
if  (response.IsSuccessStatusCode)
{
     listproduct = response.Content.ReadAsAsync<List<Product>>().Result;
}
return  Content(JsonConvert.SerializeObject(listproduct));

  

 /// <summary>
        /// url请求
        /// </summary>
        /// <param name="type"></param>
        /// <param name="paramData"></param>
        /// <returns></returns>
        private static string WebRequest(string method, string type, string paramData)
        {
            string apiUrl = "http://" + ConfigHelper.GetBaseUrl("url") + "/Session";
            apiUrl = apiUrl.EndsWith("/") ? apiUrl : apiUrl + "/";

            string postUrl = string.Empty;
            if (type == "Get" || type == "Delete")
            {
                postUrl = apiUrl + method + "?" + paramData;
            }
            else
            {
                postUrl = apiUrl + method;
            }
            LogWriter.ToDebug(postUrl);
            string ret = string.Empty;

            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(paramData);
            System.Net.HttpWebRequest webReq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(new Uri(postUrl));
            webReq.Method = type;
            switch (type)
            {
                case "Post":
                    {
                        webReq.ContentLength = byteArray.Length;
                        webReq.ContentType = "application/json";
                        System.IO.Stream newStream = webReq.GetRequestStream();
                        newStream.Write(byteArray, 0, byteArray.Length); //写入参数
                        newStream.Close();
                    }
                    break;
                case "Put":
                    {
                        webReq.ContentLength = byteArray.Length;
                        webReq.ContentType = "application/x-www-form-urlencoded";
                        System.IO.Stream newStream = webReq.GetRequestStream();
                        newStream.Write(byteArray, 0, byteArray.Length); //写入参数
                        newStream.Close();
                    }
                    break;
            }

            using (System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)webReq.GetResponse())
            {
                System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);
                ret = sr.ReadToEnd();
                sr.Close();
            }

            return ret;
        }

  

猜你喜欢

转载自www.cnblogs.com/liuqiyun/p/9144816.html