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

  这里。

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

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

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

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

  初试Asp.Net Web Api

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

  初试Asp.Net Web Api

  此时点击安装即可。

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

  初试Asp.Net Web Api

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

  初试Asp.Net Web Api

  初试Asp.Net Web Api

  按照上面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删除指定学生信息。运行效果图如下初试Asp.Net Web Api

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

  

相关文章:

  • 2022-02-06
  • 2022-12-23
  • 2021-12-04
  • 2022-12-23
  • 2021-08-06
  • 2022-01-03
  • 2021-09-26
  • 2021-06-03
猜你喜欢
  • 2021-09-15
  • 2021-12-25
  • 2021-12-16
  • 2022-12-23
  • 2021-06-03
  • 2022-12-23
相关资源
相似解决方案