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也是如此。

      

  • 相关阅读:
    How can i install ctags in centos 6.4
    [转载] Ubuntu Vim powerline 插件
    Vim 相关网页
    [转载] vim技巧:设置空格和Tab字符可见
    Don't trust cplusplus.com, it's crap. If any, go to cppreference.com.
    Vim yank only 50 lines
    按进程名终止进程
    Shell 脚本 Tips
    Bash 脚本 逐行处理文本文件的内容
    生成并配置https本地证书
  • 原文地址:https://www.cnblogs.com/wucj/p/3112479.html
Copyright © 2011-2022 走看看