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<stringstring>()

    {

        {"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<stringstring>()

    {

        {"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));

  

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

/// <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;

}

  

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

c#调用webapi post list

折腾了半天,最后用这种方式解决了。上面那种还是不会。

//请求路径

string url = "http://localhost:3063/api/Blog/SetTopNo";

//定义request并设置request的路径

WebRequest request = WebRequest.Create(url);

request.Method = "post";

//初始化request参数

string postData = "[{\"TopNo\": \"22\",\"CategoryId\": \"1\",\"BlogId\": \"1723\"}, {\"TopNo\": \"12\",\"CategoryId\": \"2\",\"BlogId\":\"1723\"}]";

//设置参数的编码格式,解决中文乱码

byte[] byteArray = Encoding.UTF8.GetBytes(postData);

//设置request的MIME类型及内容长度

request.ContentType = "application/json";

request.ContentLength = byteArray.Length;

//打开request字符流

Stream dataStream = request.GetRequestStream();

dataStream.Write(byteArray, 0, byteArray.Length);

dataStream.Close();

//定义response为前面的request响应

WebResponse response = request.GetResponse();

  

问题:c#后台调用webapi接口,后面用webrequest虽然解决了传复杂类型的问题,但是写起来麻烦,还是想用httpclient,经过打断点查看header,查阅资料,加班终于搞定

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

var postData = new

{

Title = title,

Content = JsonConvert.SerializeObject(contentJson),

PublishFlag = "0",//发布标记:1已发布,0未发布 跟游记保持一至

LongArticle = longArticle,//复杂类型

};

var content = new StringContent(JsonConvert.SerializeObject(postData));//用的StringContent 之前用的FormUrlEncodedContent

content.Headers.ContentType = new MediaTypeHeaderValue("application/json");//关键

HttpClient httpClient = GetUseHttpClient();

//编辑,新增接口不一样

var url = "api/Blog/PublishLongArticle";

if (request.blogid!=null&&request.blogid.Trim().Length > 0)

{

url = "api/Blog/EditLongArticle";

}

var apiResponse = httpClient.PostAsync(url, content).Result;

if (apiResponse.IsSuccessStatusCode)

  

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值