HTML5技术

[ASP.NET]谈谈REST与ASP.NET Web API - Never、C(2)

字号+ 作者:H5之家 来源:博客园 2015-10-09 15:25 我要评论( )

static HttpClient httpClient = new HttpClient();static void Main(string[] args){//由于HttpClient类中的方法大部分为异步//Main方法不支持Async关键字//故新建一个方法,使其同步运行Process();Console.Read()

static HttpClient httpClient = new HttpClient(); static void Main(string[] args) { //由于HttpClient类中的方法大部分为异步 //Main方法不支持Async关键字 //故新建一个方法,使其同步运行 Process(); Console.Read(); } async static void Process() { //获取当前联系人列表 ListContacts(); //添加新的联系人 var contact = new Contact { Name = "王五" }; await httpClient.PostAsJsonAsync("http://localhost/selfhost/api/contacts", contact); Console.WriteLine("添加新联系人“王五”:"); ListContacts(); //修改现有的某个联系人 var response = await httpClient.GetAsync("http://localhost/selfhost/api/contacts/001"); contact = (await response.Content.ReadAsAsync<IEnumerable<Contact>>()).First(); contact.Name = "赵六"; await httpClient.PutAsJsonAsync("http://localhost/selfhost/api/contacts/001", contact); Console.WriteLine("修改联系人“001”信息:"); ListContacts(); //删除现有的某个联系人 await httpClient.DeleteAsync("http://localhost/selfhost/api/contacts/002"); Console.WriteLine("删除联系人“002”:"); ListContacts(); } async static void ListContacts() { var response = await httpClient.GetAsync("http://localhost/selfhost/api/contacts"); IEnumerable<Contact> contacts = await response.Content.ReadAsAsync<IEnumerable<Contact>>(); Console.WriteLine("当前联系人列表:"); foreach (Contact contact in contacts) { Console.WriteLine("{0,-6}{1,-6}", contact.Id, contact.Name); } Console.WriteLine(); }

 

Web API原理

Web API借用了MVC的设计,以Controller形式定义服务,Action代表具体的操作.

Web API借助于URL路由得到控制器,再根据路由对象,通过http方法找到对应的action.(实际上,如果根据url解析不到action的时候,才会通过http方法)

 

路由注册

config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );

由于在模板中没有定义action,所以只能通过httpmethod来找action.(并且是根据方法前缀匹配即可)

 

通过浏览器api/Contacts查看的时候,会返回一个xml格式的数据.

实际上,webapi是先检查accept,从左到右,去匹配序列化器,如果没有匹配到则使用默认的json序列化器.

 

 

管道式设计

Web API也采用了管道式设计,这是一个不同于MVC的管道.虽然很多地方和MVC相似.

Route对象为HttpRoute

Handle对象为HttpControllerHandler(由于实现了IHttpAsyncHandler接口,所以默认走BeginProcessRequest异步方法)

 

本文地址: 

参考:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 如何在 ASP.NET Core 中发送邮件 - Savorboard

    如何在 ASP.NET Core 中发送邮件 - Savorboard

    2017-05-02 08:02

  • 十二个 ASP.NET Core 例子 - Savorboard

    十二个 ASP.NET Core 例子 - Savorboard

    2017-04-27 16:01

  • ASP.NET MVC5请求管道和生命周期 - 雪飞鸿

    ASP.NET MVC5请求管道和生命周期 - 雪飞鸿

    2017-04-24 08:04

  • ASP.NET Core MVC 源码学习:详解 Action 的激活 - Savorboard

    ASP.NET Core MVC 源码学习:详解 Action 的激活 - Savorboard

    2017-04-14 13:04

网友点评
"