没有合适的资源?快使用搜索试试~ 我知道了~
首页创建ASP_NET_Web_API_2.0应用实例
创建ASP_NET_Web_API_2.0应用实例

由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET MVC的书籍“额外奉送”的),以至于很多人会觉得ASP.NET Web API仅仅是ASP.NET MVC的一个小小的扩展而已,自身并没有太多“大书特书”的地方。而真实的情况下是:ASP.NET Web API不仅仅具有一个完全独立的消息处理管道,而且这个管道比为ASP.NET MVC设计的管道更为复杂,功能也更为强大。虽然被命名为“ASP.NET Web API”,但是这个消息处理管道却是独立于ASP.NET平台的,这也是为什么ASP.NET Web API支持多种寄宿方式的根源所在。 为 了让读者朋友们先对ASP.NET Web API具有一个感性认识,接下来我们以实例演示的形式创建一个简单的ASP.NET Web API应用。这是一个用于实现“联系人管理”的单页Web应用,我们以Ajax的形式调用Web API实现针对联系人的CRUD操作。
资源详情
资源评论
资源推荐

创建 ASP.NET Web API 2.0 应用实
例
由于 ASP.NET Web API 具有与 ASP.NET MVC 类似的编程方式,再加上目前市面上专
门介绍 ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍 ASP.NET
MVC 的书籍“额外奉送”的),以至于很多人会觉得 ASP.NET Web API 仅仅是 ASP.NET
MVC 的一个小小的扩展而已,自身并没有太多“大书特书”的地方。而真实的情况下是:
ASP.NET Web API 不仅仅具有一个完全独立的消息处理管道,而且这个管道比为 ASP.NET
MVC 设计的管道更为复杂,功能也更为强大。虽然被命名为“ASP.NET Web API”,但是这
个消息处理管道却是独立于 ASP.NET 平台的,这也是为什么 ASP.NET Web API 支持多种寄
宿方式的根源所在。
为 了让读者朋友们先对 ASP.NET Web API 具有一个感性认识,接下来我们以实例演示
的形式创建一个简单的 ASP.NET Web API 应用。这是一个用于实现“联系人管理”的单页
Web 应用,我们以 Ajax 的形式调用 Web API 实现针对联系人的 CRUD 操作。
一、构建解决方案
Visual Studio 为我们提供了专门用于创建 ASP.NET Web API 应用的项目模板,借助于
此项目模板提供的向导,我们可以“一键式”创建一个完整的 ASP.NET Web API 项目。在项
目创建过程中,Visual Studio 会自动为我们添加必要的程序集引用和配置,甚至会为我们
自动生成相关的代码,总之一句话:这种通过向导生成的项目在被创建之后其本身就是一
个 可执行的应用。
对于 IDE 提供的这种旨在提高生产效率的自动化机制,我个人自然是推崇的,但是我
更推荐读者朋友们去了解一下这些自动化机制具体为我们做了什么?做这些的目的何在?
哪些是必需的,哪些又是不必要的?正是基于这样的目的,在接下来演示的实例中,我们
将摒弃 Visual Studio 为我们提供的向导,完全在创建的空项目中编写我们的程序。这些空
项目体现在如右图所示的解决方案结构中。
如右图所示,整个解决方案一共包含 6 个项目,上面介绍的作为“联系人管理器”的单
页 Web 应用对应着项目 WebApp,下面的列表给出了包括它在内的所有项目的类型和扮演
的角色。
·Common:这是一个空的类库项目,仅仅定义了表示联系人的数据类型而已。之所以

将 数 据 类 型 定 义 在 独 立 的 项 目 中 , 只 要 是 考 虑 到 它 会 被 多 个 项 目 ( WebApi 和
ConsoleApp)所使用。
WebApi:这是一个空的类库项目,表现为 HttpController 类型的 Web API 就定义在此
项目中,它具有对 Common 的项目引用。
WebHost:这是一个空的 ASP.NET Web 应用,它实现了针对 ASP.NET Web API 的 Web
Host 寄宿,该项目具有针对 WebApi 的项目引用。
SelfHost:这是一个空的控制台应用,旨在模拟 ASP.NET Web API 的 Self Host 寄宿模
式,它同样具有针对 WebApi 的项目引用。
WebApp:这是一个空的 ASP.NET Web 应用,代表“联系人管理器”的网页就存在于该项
目之中,至于具体的联系人管理功能,自然通过以 Ajax 的形式调用 Web API 来完成。
ConsoleApp:这是一个空的控制台应用,我们用它来模拟如何利用客户端代理来实现
对 Web API 的远程调用,它具有针对 Common 的项目引用。
二、定义 Web API
在正式定义 Web API 之前,我们需要在项目 Common 中定义代表联系人的数据类型
Contact。简单起见,我们仅仅为 Contact 定义了如下几个简单的属性,它们分别代表联系
人的 ID、姓名、联系电话、电子邮箱和联系地址。
1: public class Contact
2: {
3: public string Id { get; set; }
4: public string Name { get; set; }
5: public string PhoneNo { get; set; }
6: public string EmailAddress { get; set; }
7: public string Address { get; set; }
8: }
表现为 HttpController 的 Web API 定义在 WebApi 项目之中,我们一般将 ApiController
作为继承的基类。ApiController 定义在 “System.Web.Http.dll”程序集中,我们可以在目录
“%ProgramFiles%\Microsoft ASP.NET\ASP.NET Web Stack 5\Packages\”中找到这个程序集。
具体来说,该程序集存在于子目录“Microsoft.AspNet.WebApi.Core.5.0.0 \lib\net45”中。
Web API 体现在如下所示的 ContactsController 类型中。在该类型中,我们定义了
Get、Post、Put 和 Delete 这 4 个 Action 方法,它们分别实现了针对联系人的查询、添加、
修改和删除操作。Action 方法 Get 具有一个表示联系人 ID 的可缺省参数,如果该参数存在
则返回对应的 联系人,否则返回整个联系人列表。由于 ASP.NET Web API 默认实现了
Action 方法与 HTTP 方法的映射,所以方法名也体现了它们各自所能处理请求必须采用的
HTTP 方法。
1: public class ContactsController: ApiController
2: {
3: static List<Contact> contacts;
4: static int counter = 2;
5:?
6: static ContactsController()
7: {

8: contacts = new List<Contact>();
9: contacts.Add(new Contact { Id = "001", Name = "张三",
10: PhoneNo = "0512-12345678", EmailAddress = "zhangsan@gmail.com",
11: Address = "江苏省苏州市星湖街 328 号" });
12: contacts.Add(new Contact { Id = "002", Name = "李四",
13: PhoneNo = "0512-23456789", EmailAddress = "lisi@gmail.com",
14: Address = "江苏省苏州市金鸡湖大道 328 号" });
15: }
16:?
17: public IEnumerable<Contact> Get(string id = null)
18: {
19: return from contact in contacts
20: where contact.Id == id || string.IsNullOrEmpty(id)
21: select contact;
22: }
23:?
24: public void Post(Contact contact)
25: {
26: Interlocked.Increment(ref counter);
27: contact.Id = counter.ToString("D3");
28: contacts.Add(contact);
29: }
30:?
31: public void Put(Contact contact)
32: {
33: contacts.Remove(contacts.First(c => c.Id == contact.Id));
34: contacts.Add(contact);
35: }
36:?
37: public void Delete(string id)
38: {
39: contacts.Remove(contacts.First(c => c.Id == id));
40: }
41: }
简 单 起 见 , 我 们 利 用 一 个 静 态 字 段 ( contacts ) 表 示 存 储 的 联 系 人 列 表 。 当
ContactsController 类型被加载的时候,我们添加了 两个 ID 分别为“001”和“002”的联系人记
录。至于实现联系人 CRUD 操作的 Action 方法,我们也省略了必要的验证,对于本书后续
的演示的实 例,我们基本上也会采用这种“简写”的风格。
三、以 Web Host 方式寄宿 Web API
我们在上面已经提到过了,虽然被命名为 ASP.NET Web API,但是其核心的消息处理
管道却是独立于 ASP.NET 平台的,所以我们可以对相同的 Web API 实施不同的寄宿方式。
寄宿的本质就是利用一个具体的应用程序为 Web API 提供一个运行的环境,并最终解决“请
求的接 收 和 响 应 的回复”问题。作 为寄 宿 的 一 种 主要形式, Web Host 就是创 建 一 个
ASP.NET Web 应用作为 Web API 的宿主。
剩余11页未读,继续阅读















安全验证
文档复制为VIP权益,开通VIP直接复制

评论1