zoukankan      html  css  js  c++  java
  • 初试Asp.Net Web Api

      自Asp.Net Web Api问世以来,一直没有去体验下,有些惭愧。不过在说Web Api之前还是要提一下Rest,Rest的英文全称是:Representational State Transfer,翻译过来就是“表征状态转移”。不过在看到这译过来的6个字,我也迷迷糊糊的,名字为什么这么怪?它是Roy Fielding在2000年的时候在他的论文里面提出的一种软件架构风格。

      REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表征。获得这些表征致使这些应用程序转变了其状态。随着不断获取资源的表征,客户端应用不断地在转变着其状态。并且Roy Fielding设计良好的网络应用表现为一系列的网页,这些网页可以看作的虚拟的状态机,用户选择这些链接导致下一网页传输到用户端展现给使用的人,而这正代表了状态的转变。关于更多Rest介绍可以移步这里

      Asp.net Web Api有三种使用形式,分别是:1) 自寄宿。2)Asp.net Mvc 。3)Asp.Net Web Form 。本文主要讲解自寄宿形式。

      如果大家没有安装VS2012,那么久让VS2010升级SP1补丁即可,先在VS2010下新建一个空项目解决方案,命名:WebApi,因这里是使用自寄宿形式,所以我是在控制台下面实现的。在解决方案下新增两个控制台项目ApiHost,Client。例子中涉及到操作学生信息,所以新建了一个Model项目,里面含有一个Student实体类。项目结构如下:

      项目新建完之后,我们还要用Nuget工具添加针对Asp.Net Web API自我寄宿相关的引用,操作步骤如下:

      1)如果在VS2010下面没有安装Nuget插件的话,我们可以这样添加

      

      按照这个操作,打开“扩展管理器”,在里面搜索"Nuget"

      

      此时点击安装即可。

      2) 服务端,客户端添加针对Asp.net Web API的引用

      

      接下来会弹出新窗体,在里面搜索"Web API","Self Host"

      

      

      按照上面2步操作,准备工作算是完成了。

      Asp.net Web API 直接借鉴了Asp.net MVC 的设计,两者具有极为相同的编程方式。先在ApiHost项目新建一个Student的Controll,这里的Controll必须继承ApiController,它是一个抽象类,继承IHttpController接口。具体代码如下:

    public class StudentController : ApiController
    {
            public IList<Student> GetStudentLst()
            {
                return Students;
            }
    
            public Student GetStudentById(int Id)
            {
                return Students.FirstOrDefault(w => w.ID == Id);
            }
    
            public void DeleteStudentById(int Id)
            {
                var stu = Students.FirstOrDefault(w => w.ID == Id);
                Students.Remove(stu);
            }
    
    
            static IList<Student> Students = new List<Student>() { 
                new Student{ID = 100,Name="tauruswu",Sex="",Grade="大学一年级"},
                new Student{ID = 101,Name="赵文卓",Sex="",Grade="大学四年级"},
                new Student{ID = 102,Name="成东青",Sex="",Grade="大学三年级"},
                new Student{ID = 103,Name="王阳",Sex="",Grade="大学三年级"},
                new Student{ID = 104,Name="孟晓俊",Sex="",Grade="大学一年级"},
                new Student{ID = 105,Name="良琴",Sex="",Grade="大学二年级"}
            };
    }

    上述代码分别定义了两个Get操作,一个Delete操作。

      对StudentControll的自我寄宿定义在Program里面,如下代码所示,我们针对监听地址http://127.0.0.1:8080创建了一个HttpSelfHostConfiguration对象,并且进行相应路由注册。然后针对HttpSelfHostConfiguration创建一个HttpSelfHostServer对象,调用OpenSync方法启动寄宿的Web API。

    static void Main(string[] args)
    {
                var baseAddr = new Uri("http://127.0.0.1:8080");
                var hostConfig = new HttpSelfHostConfiguration(baseAddr);
                hostConfig.Routes.MapHttpRoute("ApiService", 
                                                "Api/{Controller}/{Id}",
                                                new { Id = RouteParameter.Optional });
    
                using (HttpSelfHostServer hostServer = new HttpSelfHostServer(hostConfig))
                {
                    hostServer.OpenAsync().Wait();
    
                    Console.WriteLine("已经启动寄宿的Web Api.");
                    Console.WriteLine();
                    Console.WriteLine("按任意键离开.");
                    Console.ReadLine();
                }
    }

      在客户端Client项目里面运用HttpClient对象进行Web Api的调用。

        static HttpClient client = new HttpClient();
    
        static void Main(string[] args)
        {
                client.BaseAddress = new Uri("http://127.0.0.1:8080");
    
                Console.WriteLine("开始获取所有学生列表:");
                GetStudentLst();
                Console.WriteLine();
                Console.WriteLine("获取学号等于101的学生信息:");
                GetStudentById(101);
                Console.WriteLine();
                Console.WriteLine("删除学号等于102的学生信息:");
                RemoveStaudentBy(102);
                Console.WriteLine();
                Console.WriteLine("获取最新学生列表:");
                GetStudentLst();
                Console.ReadLine();
    
            }
    
            static void GetStudentLst()
            {
                HttpResponseMessage resp = client.GetAsync("Api/Student").Result;
                resp.EnsureSuccessStatusCode();
    
                var students = resp.Content.ReadAsAsync<IList<Student>>().Result;
    
                foreach(var stu in students)
                {
                    Console.WriteLine("学号:{0}  姓名:{1}  性别:{2}  年级:{3}",
                                        stu.ID,stu.Name,stu.Sex,stu.Grade);
                }
            }
    
            static void GetStudentById(int id)
            {
                HttpResponseMessage resp = client.GetAsync(string.Format("Api/Student/{0}",id)).Result;
                resp.EnsureSuccessStatusCode();
    
                var stu = resp.Content.ReadAsAsync<Student>().Result;
    
                Console.WriteLine("学号:{0}  姓名:{1}  性别:{2}  年级:{3}",
                                        stu.ID, stu.Name, stu.Sex, stu.Grade);
                
            }
    
            static void RemoveStaudentBy(int id)
            {
                client.DeleteAsync(string.Format("Api/Student/{0}", id)).Wait();
         }

    我们看下上面的代码,先根据地址http://127.0.0.1:8080创建一个HttpClient对象,并用GetAsync()获取列表,单个信息,用DeleteAsync删除指定学生信息。运行效果图如下

      到这里,一个简单的Web Api示例就结束了,是不是有那种入门很简单的感觉。Web API的调用本质就是一个HTTP请求发送和响应解析的过程,完全可以按照我们熟悉的方式来调用。Asp.net Web API采用了管道式设计,Asp.Net MVC也是如此。

      

  • 相关阅读:
    This counter can increment, decrement or skip ahead by an arbitrary amount
    LUT4/MUXF5/MUXF6 logic : Multiplexer 8:1
    synthesisable VHDL for a fixed ratio frequency divider
    Bucket Brigade FIFO SRL16E ( VHDL )
    srl16e fifo verilog
    DualPort Block RAM with Two Write Ports and Bytewide Write Enable in ReadFirst Mode
    Parametrilayze based on SRL16 shift register FIFO
    stm32 spi sdcard fatfs
    SPI bus master for System09 (2)
    SQLSERVER中的自旋锁
  • 原文地址:https://www.cnblogs.com/wucj/p/3112479.html
Copyright © 2011-2022 走看看