zoukankan      html  css  js  c++  java
  • c# WebApi创建及客户端调用

    前段时间学习WebApi的创建与调用,网上的信息千奇百怪(知识有限,看不懂啊),通过查阅资料及借鉴博友实例分析后总结一下,总结一套简单完整的WebApi创建及实例

    首先创建一个WebApi服务(流程就不写了,网上的介绍多的像牛虱一样),但是该配置的要配置好哦

    1.服务端

    首先创建一个Control类,我这里命名为UserInfoController,逻辑代码可以在里面放飞吧。

    下面举例说明

    我们自定义一个路由方法(url: "{controller}/{action}/{id}"这个定义了我们url的规则,{controller}/{action}定义了路由的必须参数,{id}是可选参数

     1 public class RouteConfig
     2     {
     3         public static void RegisterRoutes(RouteCollection routes)
     4         {
     5             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
     6 
     7             routes.MapRoute(
     8                 name: "",
     9                 url: "{controller}/{action}/{id}",
    10                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    11             );
    12         }
    13     }
    View Code

    这里我在WebApi方法里创建了两种Method   (POST ,GET)

     1  public class UserInfoController : ApiController
     2     {
     3 
     4         /// <summary>
     5         /// //如果是GET方式时,调用的接口就是 http://localhost:61668/ActionApi/UserInfo/GetString
     6         /// </summary>
     7         /// <returns></returns>
     8         [HttpPost]
     9         public string GetString([FromBody]student info)
    10         {
    11             return "Name:" + info.name   +"year:"+info.year;
    12         }
    13 
    14         [HttpGet]
    15         /// <summary>
    16         /// 如果是GET方式时,调用的接口就是 http://localhost:61668/ActionApi/UserInfo/User?UserName=张三
    17         /// </summary>
    18         /// <param name="UserName"></param>
    19         /// <returns></returns>
    20         //[HttpPost]
    21 
    22         public List<string> User(string UserName)
    23         {
    24             List<string> s = new List<string>();
    25             s.Add(UserName + "1");
    26             s.Add(UserName + "2");
    27             s.Add(UserName + "3");
    28             return s;
    29 
    30         }
    31     }
    View Code

    2.客户端调用
    2.1 WebRequest方式调用

     1   public static string WebRequest_post(string url, string body)
     2         {
     3             //定义request并设置request的路径
     4             WebRequest request = WebRequest.Create(url);
     5             request.Method = "post";
     6             //初始化request参数
     7             //设置参数的编码格式,解决中文乱码
     8             byte[] byteArray = Encoding.UTF8.GetBytes(body);
     9             //设置request的MIME类型及内容长度
    10             request.ContentType = "application/json; charset=UTF-8";
    11             request.ContentLength = byteArray.Length;
    12             //打开request字符流
    13             Stream dataStream = request.GetRequestStream();
    14             dataStream.Write(byteArray, 0, byteArray.Length);
    15             dataStream.Close();  
    16             //定义response为前面的request响应
    17             WebResponse response = request.GetResponse();
    18             //定义response字符流
    19             dataStream = response.GetResponseStream();
    20             StreamReader reader = new StreamReader(dataStream);
    21              return  reader.ReadToEnd();//读取所有
    22         }
    23      
    24         public static string WebRequest_Get(string UNIT_NO)
    25         {
    26           
    27             Encoding encoding = Encoding.UTF8;
    28             string url = "http://localhost:61668/ActionApi/UserInfo/User?UserName={0}";
    29             url = string.Format(url, UNIT_NO);
    30             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    31             request.Method = "GET";
    32             request.Accept = "text/html, application/xhtml+xml, */*";
    33             request.ContentType = "application/json";
    34             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    35             using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
    36             {
    37                 return reader.ReadToEnd();
    38             }
    39         }
    View Code

    2.2 Htpclient

     1  public  static async void  httpclient_post()
     2         {
     3             string url = "http://localhost:61668/ActionApi/UserInfo/GetString/";
     4             //设置HttpClientHandler的AutomaticDecompression
     5             var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
     6             //创建HttpClient(注意传入HttpClientHandler)
     7             using (var http = new HttpClient(handler))
     8             {
     9                 //使用FormUrlEncodedContent做HttpContent
    10                 var content = new FormUrlEncodedContent(new Dictionary<string, string>()
    11                 {    {"name","6"},
    12                      {"year","4"},
    13                    
    14                  });
    15                 //await异步等待回应
    16                 var response = await http.PostAsync(url, content);
    17                 //确保HTTP成功状态值
    18                 response.EnsureSuccessStatusCode();
    19                 //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)         
    20                 string s= await response.Content.ReadAsStringAsync();
    21 
    22             }
    23         }
    24 
    25         public static async void httpclient_Get(string url,string UNIT_NO)
    26         {
    27             url = string.Format(url, UNIT_NO);
    28             //设置HttpClientHandler的AutomaticDecompression
    29             var handler = new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip };
    30             //创建HttpClient(注意传入HttpClientHandler)
    31             using (var http = new HttpClient(handler))
    32             {
    33                 //使用FormUrlEncodedContent做HttpContent
    34                 //await异步等待回应
    35                 var response = await http.GetAsync(url);
    36                 //确保HTTP成功状态值
    37                 response.EnsureSuccessStatusCode();
    38                 //await异步读取最后的JSON(注意此时gzip已经被自动解压缩了,因为上面的AutomaticDecompression = DecompressionMethods.GZip)         
    39                 string s = await response.Content.ReadAsStringAsync();
    40             }
    41         }
    View Code

    3.函数调用

                MessageBox.Show(API.WebRequest_Get("张三"));
                 MessageBox.Show(API.WebRequest_post("http://localhost:61668/ActionApi/UserInfo/GetString/", "{name:"张三",year:"25"}"));
                API.httpclient_post();

                API.httpclient_Get();
                这几种方式亲测可用

  • 相关阅读:
    工具类
    开发中用到的工具
    项目中另外添加有用的文件:404
    如何组织项目结构:约定优于配置
    媒体查询
    响应式网站开发需要掌握的技术及国内外主流浏览器
    响应式网站概念
    sql存储过程,raisError后要return错误代码,过程最后要return 0
    delphi用TAdoStoredProc调用存储过程,兼容sql2005、2008、2014的远程事务问题
    网页视频下载牛逼工具,支持各种格式转换,比如腾讯视频格式qlv转mp4
  • 原文地址:https://www.cnblogs.com/TechnologyDictionary/p/10432513.html
Copyright © 2011-2022 走看看