博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过ASP.NET Web API + JQuery创建一个简单的Web应用
阅读量:6259 次
发布时间:2019-06-22

本文共 5764 字,大约阅读时间需要 19 分钟。

看了dudu的《》一文,想起多很久之前体现ASP.NET Web API而创建的一个Demo。这是一个只涉及到简单CRUD操作的Web应用,业务逻辑以Web API的形式定义并以服务的形式发布出来,前台通过jQuery处理用户交互并调用后台服务。[源代码从下载]

目录

一、一个简单的基于CRUD
二、通过ASP.NET Web API提供服务
三、通过JQuery消费服务

一、一个简单的基于CRUD的Web应用

这个简单的Demo应用用于模拟“联系人管理”。当页面加载的时候,所有的联系人列表被列出来。在同一个页面中,我们可以添加一个新的联系人,也可以修改和删除现有联系人信息。整个应用唯一的页面在浏览器中的呈现效果如下图所示。

二、通过ASP.NET Web API提供服务

我们来简单介绍作为Web API形式发布的联系人管理服务的定义,先来看看用于表示联系人的Contact类型的定义。

1: public class Contact
2: {
3:     public string Id { get; set; }
4:     public string FirstName { get; set; }
5:     public string LastName { get; set; }
6:     public string PhoneNo { get; set; }
7:     public string EmailAddress { get; set; }
8: }

“联系人服务”以具有如下定义的ContactController的形式定义,它是ApiController的子类。简单起见,我们采用静态字段作为对联系人信息的存储。ContactController定义了Get、Put、Post和Delete用于进行对联系人的获取、添加、修改和删除操作。我想对Web API不了解的人会感概,为了什么采用常用的四个HTTP方法作为操作的名称,因为它们在默认的情况下就可以映射为HTTP请求的方法。

1: public class ContactController : ApiController
2: {
3:     private static List
contacts = new List
4:     {
5:         new Contact{ Id="001", FirstName = "San", LastName="Zhang", PhoneNo="123", EmailAddress="zhangsan@gmail.com"},
6:         new Contact{ Id="002",FirstName = "Si", LastName="Li", PhoneNo="456", EmailAddress="lisi@gmail.com"}
7:     };
8:
9:     public IEnumerable
Get()
10:     {
11:         return contacts;
12:     }
13: 
14:     public Contact Get(string id)
15:     {
16:         return contacts.FirstOrDefault(c => c.Id == id);
17:     }
18: 
19:     public void Put(Contact contact)
20:     {
21:         if (string.IsNullOrEmpty(contact.Id))
22:         {
23:             contact.Id = Guid.NewGuid().ToString();
24:         }
25:         contacts.Add(contact);
26:     }
27: 
28:     public void Post(Contact contact)
29:     {
30:         Delete(contact.Id);
31:         contacts.Add(contact);
32:     }
33: 
34:     public void Delete(string id)
35:     {
36:         Contact contact = contacts.FirstOrDefault(c => c.Id == id);
37:         contacts.Remove(contact);
38:     }
39: }

和ASP.NET MVC Web应用一样,我们同样采用URL路由机制来实现请求地址与目标Controller和Action的映射,而针对API默认注册的路有如下所示。

1: public class MvcApplication : System.Web.HttpApplication
2: {
3:     //...
4:     public static void RegisterRoutes(RouteCollection routes)
5:     {
6:          //...
7:         routes.MapHttpRoute(
8:             name: "DefaultApi",
9:             routeTemplate: "api/{controller}/{id}",
10:             defaults: new { id = RouteParameter.Optional }
11:         );
12: }

按照注册的路由规则和Action方法名称与HTTP方法的默认影射机制,我们可以直接在浏览器中分别访问地址“/api/contact”和“/api/contact/001”得到所有联系人列表和ID为“001”的联系人信息。得到的结果如下图所示。

三、通过JQuery消费服务

我们通过ASP.NET MVC来构建Web应用,默认的HomeController定义如下,默认的Index操作仅仅是将默认的View呈现出来而已。

1: public class HomeController : Controller
2: {
3:     public ActionResult Index()
4:     {
5:         return View();
6:     }
7: }

View中对用户操作的相应和对后台服务的调用都通过JQuery来完成,整个View的定义如下所示。

1: 
1: 
2:     $(function () {
3:         loadAllContacts();
4:        }
5:      )
6: 
7:     function loadAllContacts() {
8:         $.ajax({
9:             url     : "api/contact",
10:             type    : "GET",
11:             dataType: "json",
12:             success : function (data) { renderContactList(data) }
13:            }
14:         );
15:     }
16: 
17:     function renderContactList(contacts) {
18:         var html = "
";
19:         html += "First NameLast NamePhone No.Email Address";
20:         for (i = 0; i < contacts.length; i++) {
21:             html += "" + contacts[i].FirstName + ""
22:                  + contacts[i].LastName + "" + contacts[i].PhoneNo + ""
23:                  + "" + ""
24:                  + "Update     "
25:                  + "Delete" + "";
26:         }
27:         html += "" + "" + ""
28:             + "" + ""
29:             + "" + ""
30:             + "" + ""
31:             + "Create " + "";
32:         html += "";
33:         $("#contacts").html(html);
34:         $("table tr:odd").addClass("oddRow");
35:     }
36: 
37:     function deleteContact(id) {
38:         $.ajax({
39:             url     : "api/contact/" + id,
40:             type    : "DELETE",
41:             success : function () { loadAllContacts();}
42:         });
43:     }
44: 
45:     function updateContact(id) {
46:         var emailAddress = $("#" +id).attr("value");
47:         $.ajax({
48:             url     : "api/contact/" + id,
49:             type    : "GET",
50:             success : function (contact) {
51:                 contact.EmailAddress = emailAddress;
52:                 update(contact);
53:             }
54:         });
55:     }
56: 
57:     function update(contact) {
58:         $.ajax({
59:             url         : "api/contact/",
60:             type        : "POST",
61:             data        : contact,
62:             contentType : "application/json",
63:             success     : function () { loadAllContacts(); }
64:         });
65:     }
66: 
67:     function addContact() {
68:         var contact = new Object();
69:         contact.FirstName       = $("#firstName").attr("value");
70:         contact.LastName        = $("#lastName").attr("value");
71:         contact.PhoneNo         = $("#phoneNo").attr("value");
72:         contact.EmailAddress    = $("#emailAddress").attr("value");
73:         $.ajax({
74:             url         : "api/contact/",
75:             type        : "PUT",
76:             data        : contact,
77:             contentType : "application/json",
78:             success     : function () { loadAllContacts(); }
79:         });
80:     }
</
script
>
2: 
作者:蒋金楠
微信公众账号:大内老A
微博:
如果你想及时得到个人撰写文章以及著作的消息推送,或者想看看个人推荐的技术资料,可以扫描左边二维码(或者长按识别二维码)关注个人公众号(原来公众帐号
蒋金楠的自媒体将会停用)。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
你可能感兴趣的文章
App.config提示错误“配置系统未能初始化”
查看>>
Angular - - ngChange、ngChecked、ngClick、ngDblclick
查看>>
JAVA学习第五十九课 — 网络编程概述
查看>>
远程共享文件夹
查看>>
convert2utf8withbom
查看>>
Codeforces Round #336 (Div. 2)A. Saitama Destroys Hotel 水题
查看>>
poj2752 Seek the Name, Seek the Fame(next数组的运用)
查看>>
pgpgin|pgpgout|pswpin|pswpout意义与差异
查看>>
全排列(递归与非递归实现)
查看>>
[转] C/C++中printf和C++中cout的输出格式
查看>>
swift 如何实现点击view后显示灰色背景
查看>>
【Android】3.9 覆盖物功能
查看>>
Plus One
查看>>
Git -- 创建版本库
查看>>
myeclipse 怎么安装与激活
查看>>
Atitit.异步编程的发展历史 1.1. TAP & async/await
查看>>
RTP timestamp与帧率及时钟频率的关系
查看>>
企业门户平台解决方案
查看>>
过滤器入门
查看>>
深入浅出讲解:php的socket通信
查看>>