ASP.NET WEB API介绍

.NET
393
0
0
2022-05-15
标签   ASP.NET

SOAP Web API采用RPC风格,它采用面向功能的架构,所以我们在设计SOAP Web API的时候首相考虑的是应高提供怎样的功能(或者操作)。

RESTful Web API采用面向资源的架构,所以在设计之初首先需要考虑的是有哪些资源可供操作。

RESTful是一种软件架构风格,提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制,它将分布在网络中某个节点中的资源通过URI进行标识,客户端应用通过URI来获取资源的表征,获得这些

表征致使这些应用程序转变了状态。随着不断获取资源的表征,客户端应用不断地在转变着状态。

ASP.NET Web API直接借鉴了ASP.NET MVC的设计以Controller的形式来定义服务

下面介绍一下ASP.NET API使用

创建Model,以Contact为例

ASP.NET WEB API介绍

添加ASP.NET API Controller 注意MVC与API集成的基类

ASP.NET WEB API介绍

ASP.NET WEB API介绍

编写ASP.NET WEB API,有下面5个方法

ASP.NET WEB API介绍

路由注册

当我们利用Visual Studio提供的向导一个创建ASP.NET Web API或者ASP.NET MVC应用的时候,在自动生成的静态类型WebApiConfig中会默认为我们注册如下一个路由。

ASP.NET WEB API介绍

客户端发起WEB APi调用,服务端返回的数据格式是根据客户端的请求类型进行返回的。

ASP.NET Web API会提取HTTP请求的“Accept”报头得到客户端可以接受的媒体类型列表,如果没有匹配的序列化器,默认使用的是针对JSON的序列化器。

如下所示的是通过Chrome访问地址“/api/contacts/001”的请求消息,其“Accept”报头携带的媒体类型列表为“text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8”,最终导致采用XML序列化方式的是源于媒体类型“application/xml”被优先匹配。

GET http://localhost:1379/api/contacts/001 HTTP/1.1

Host: localhost:1379

Connection: keep-alive

Cache-Control: max-age=0

User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko)

Chrome/20.0.1132.47 Safari/536.11

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Encoding: gzip,deflate,sdch

Accept-Language: en-US,en;q=0.8

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

Cookie: AJSTAT_ok_times=3; _ourplusFirstTime=112-5-15-14-28-38;

_ourplusReturnCount=13; _ourplusReturnTime=112-5-15-14-41-25; theme=Theme2

如果我们通过IE来访问相同的地址(“/api/contacts/001”),则会生成具有如下内容的请求消息。可以清楚地看到Accept报头的媒体列表中不再包含“application/xml”,这会导致Web API找不到与媒体类型完全匹配的序列化器,所以最终会选择基于JSON的默认序列化器。

GET http://localhost:1379/api/contacts/001 HTTP/1.1

Accept: text/html, application/xhtml+xml, */Accept-Language: en-US

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)

Accept-Encoding: gzip, deflate

Connection: Keep-Alive

Host: localhost:1379

在默认情况下,IE并不会将格式化为JSON的联系人信息显示在浏览器中,而是会弹出一个对话框提示我们将内容保存为一个文件,或者选择相应的应用程序查看响应的内容。如下所示的是整个HTTP响应的内容,可以看到响应报头“Content-Type”的值为“application/json;charset=utf-8”,而主体内容正是Contact对象的JSON表示。

HTTP/1.1 200 OK

Server: ASP.NET Development Server/10.0.0.0

Date: Sat, 07 Jul 2012 08:05:07 GMT

X-AspNet-Version: 4.0.30319

Cache-Control: no-cache

Pragma: no-cache

Expires: -1

Content-Type: application/json; charset=utf-8

Content-Length: 80

Connection: Close

{"Id":"001","Name":"张三","PhoneNo":"123","EmailAddress":"zhangsan@gmail.com"}

Web API与MVC

Web API本质上就是一个简单的HTTP请求和响应过程,

ASP.NET MVC的路由表是一个Route对象的集合,每个Route对象关联着一个类型为MvcHandler的HttpHandler对象。匹配成功的Route对象利用与之关联的MvcHandler对象来接手对当前请求的处理,而后者将请求递交给ASP.NET MVC框架进行后续处理。

ASP.NET Web API的请求分发机制与之类似,两者的差异体现在采用的路由类型的不同。如图9-4所示,ASP.NET Web API采用的路由对象类型为HttpWebRoute(这是一个内部类型),而与之关联的HttpHandler类型为

System.Web.Http.WebHost.HttpControllerHandler。我们可以将HttpControllerHandler视为URL路由系统与ASP.NET Web API之间的桥梁。