1. REST服务已经成为最新的服务端开发趋势,ASP.NET Web API即为.NET平台的一种轻量级REST架构.
  2. ASP.NET Web API直接借鉴了ASP.NET MVC的设计,两者具有非常类似的编程模式。
  3. ASP.NET Web API以Controller的形式来定义服务,而Controller中的Action方法则代表具体的操作。
  • 以下示例展示一个轻量级的架构:{
    Web前端:HTML+jQuery +KnockOut.js
    服务端:ASP.NET Web API
    通信协议:HTTP+JSON
    }

服务定义:

public class ContactsController : ApiController
    {
        private static List<Contact> contacts = new List<Contact>
        {
            new Contact{
                Id="",
                Name="张三",
                PhoneNo="",
                EmailAddress="zhangsan@gmail.com"
            },
            new Contact{
                Id="",
                Name="李四",
                PhoneNo="",
                EmailAddress="lisi@gmail.com"
            }
        };         // GET api/contacts
        public IEnumerable<Contact> Get()
        {
            return contacts;
        }         // GET api/contacts/5
        public Contact Get(string id)
        {
            return contacts.FirstOrDefault(c => c.Id == id);
        }         // POST api/contacts
        public void Post(Contact contact)
        {
            Delete(contact.Id);
            contacts.Add(contact);
        }         // PUT api/contacts/5
        public void Put(Contact contact)
        {
            contact.Id = Guid.NewGuid().ToString();
            contacts.Add(contact);
        }         // DELETE api/contacts/5
        public void Delete(string id)
        {
            Contact contact = contacts.FirstOrDefault(c => c.Id == id);
            contacts.Remove(contact);
        }
    }

服务调用:

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4     <title>联系人列表</title>
  5     <script src="../Scripts/jquery-1.7.1.js" type="text/javascript"></script>
  6     <script src="../Scripts/knockout-2.1.0.debug.js" type="text/javascript"></script>
  7 </head>
  8 <body>
  9     <div id="contacts">
 10         <table>
 11             <tr>
 12                 <th>
 13                     姓名
 14                 </th>
 15                 <th>
 16                     电话号码
 17                 </th>
 18                 <th>
 19                     Email地址
 20                 </th>
 21             </tr>
 22             <tbody>
 23                 <!-- ko foreach: allContacts -->
 24                 <tr>
 25                     <td data-bind="text:Name">
 26                     </td>
 27                     <td data-bind="text:PhoneNo">
 28                     </td>
 29                     <td>
 30                         <input type="text" class="textbox long" data-bind="value:EmailAddress" />
 31                     </td>
 32                     <td>
 33                         <a href="#" data-bind="click:$root.updateContact">修改</a> <a href="#" data-bind="click:$root.deleteContact">
 34                             删除</a>
 35                     </td>
 36                 </tr>
 37                 <!-- /ko -->
 38                 <tr data-bind="with:addedContact">
 39                     <td>
 40                         <input type="text" class="textbox" data-bind="value:Name" />
 41                     </td>
 42                     <td>
 43                         <input type="text" class="textbox" data-bind="value:PhoneNo" />
 44                     </td>
 45                     <td>
 46                         <input type="text" class="textbox long" data-bind="value:EmailAddress" />
 47                     </td>
 48                     <td>
 49                         <a href="#" data-bind="click:$root.addContact">添加</a>
 50                     </td>
 51                 </tr>
 52             </tbody>
 53         </table>
 54     </div>
 55     <script type="text/javascript">
 56         function ContactViewModel() {
 57             self = this;
 58             self.allContacts = ko.observableArray();
 59             self.addedContact = ko.observable();
 60 
 61             //加载联系人列表
 62             self.loadContacts = function () {
 63                 $.get("/api/contacts", null, function (data) {
 64                     self.allContacts(data);
 65                     var emptyContact = { Id: "", Name: "", PhoneNo: "", EmailAddress: "" };
 66                     self.addedContact(emptyContact);
 67                 });
 68             };
 69 
 70             //添加联系人
 71             self.addContact = function (data) {
 72                 if (!self.validate(data)) {
 73                     return;
 74                 }
 75                 $.ajax({
 76                     url: "/api/contacts/",
 77                     data: self.addedContact(),
 78                     type: "PUT",
 79                     success: self.loadContacts
 80                 });
 81             };
 82 
 83             //修改联系人信息
 84             self.updateContact = function (data) {
 85                 $.ajax({
 86                     url: "/api/contacts/",
 87                     data: data,
 88                     type: "POST",
 89                     success: self.loadContacts
 90                 });
 91             };
 92 
 93             //删除联系人
 94             self.deleteContact = function (data) {
 95                 $.ajax({
 96                     url: "/api/contacts/" + data.Id,
 97                     type: "DELETE",
 98                     success: self.loadContacts
 99                 });
             };
 
             self.validate = function (data) {
                 if (data.Name && data.PhoneNo && data.EmailAddress) {
                     return true;
                 }
                 alert("请输入完整联系人信息!");
                 return false;
             }
             self.loadContacts();
         }
         ko.applyBindings(new ContactViewModel());
     </script>
 </body>
 </html>

ASP.NET Web API 入门示例详解的更多相关文章

  1. ASP.NET Web API 开篇示例介绍

    ASP.NET Web API 开篇示例介绍 ASP.NET Web API 对于我这个初学者来说ASP.NET Web API这个框架很陌生又熟悉着. 陌生的是ASP.NET Web API是一个全 ...

  2. 【ASP.NET Web API教程】1 ASP.NET Web API入门

    原文 [ASP.NET Web API教程]1 ASP.NET Web API入门 Getting Started with ASP.NET Web API第1章 ASP.NET Web API入门 ...

  3. 基于.Net Framework 4.0 Web API开发(2):ASP.NET Web APIs 参数传递方式详解

    概述:  ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.调用API过程中参数的传递是必须的,本节就来谈谈 ...

  4. ASP.net Web API综合示例

    目录 概述 功能介绍 程序结构 服务器端介绍 客户端介绍 “契约” Web API设计规则 并行写入冲突与时间戳 身份验证详解 Web API验证规则 客户端MVVM简介 Web.Config 本DE ...

  5. ASP.NET Web API 入门大杂烩

    [前言] 本文是大杂烩,意思即是:到处Copy再加一点点思考而混在一起的文章,引用来源因为太多太杂故而省略,望原作者原谅. [概述] ASP.NET Web API随ASP.NET MVC 4一起发行 ...

  6. ASP.NET Web API使用示例

    原文地址:https://blog.csdn.net/chinacsharper/article/details/21333311 上篇博客讲解rest服务开发时,曾经提到过asp.net mvc中的 ...

  7. C#版ASP.NET Web API使用示例

    为更好更快速的上手Webapi设计模式的接口开发,本文详细解释了在Web API接口的开发过程中,我们可能会碰到各种各样的问题总结了这篇,希望对大家有所帮助. 1:在接口定义中确定MVC的get或者P ...

  8. ASP.NET Web API 入门 (API接口、寄宿方式、HttpClient调用)

    一.ASP.NET Web API接口定义 ASP.NET Web API默认实现了Action方法和HTTP方法的映射,Action方法方法名体现了其能处理的请求必须采用的HTTP方法 二.寄宿方式 ...

  9. 【Web API系列教程】1.1 — ASP.NET Web API入门

    前言 HTTP不仅仅服务于web页面.同一时候也是构建暴露服务和数据的API的强大平台.HTTP有着简单.灵活和无处不在的特点.你能想到的差点儿全部平台都包括有一个HTTP库.所以HTTP服务能够遍及 ...

随机推荐

  1. jenkins解决jenkins内存溢出问题

    在jenkins master-slave配置中,总是出现内存溢出问题,更换了机器设备仍然跑不起来: 问题如下: Status Code: 500 Exception: org.apache.comm ...

  2. mysql数据库的主从

    1. Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容; 2. Master 接收到来自 Slave 的 IO 线程的请求后,通过负责 ...

  3. [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配

    环境:  操作系统:64位WIN7   数据库:SQL Server 2000 SP1  开发语言:J2EE 在Servlet连接数据库时出错提示:  [Microsoft][ODBC 驱动程序管理器 ...

  4. php中rsa加密及解密和签名及验签

    加密的内容长度限制为密钥长度少位,如位的密钥最多加密的内容为个长度. 公钥加密 $public_content=file_get_contents(公钥路径); $public_key=openssl ...

  5. java中对插入排序的理解以及实例

    一.基本思想 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入. 插入排序非常类似于整扑克牌. 在开始摸牌时,左手是空的,牌面朝下放在桌上.接着,一次从桌上摸起一张牌 ...

  6. hibernate的二级缓存

    缓存(Cache): 计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能.缓存中的数 ...

  7. double函数和int函数

    可以看到,当tensor全是double型时,int函数会把所有元素取整,从1.5可以看出,不是四舍五入,而是取整.double函数又把整数型元素变成double型. th> a 0.0000 ...

  8. sublime 自动编译

    Tools --> Build System --> New: { "shell_cmd": "cc.bat \"$file\"" ...

  9. [问题2015S09] 复旦高等代数 II(14级)每周一题(第十教学周)

    [问题2015S09]  设 \(A,B\) 是 \(n\) 阶复矩阵, 满足 \(\mathrm{rank}(AB-BA)\leq 1\), 证明: \(A,B\) 可同时上三角化. 问题解答请在以 ...

  10. HDU 5795 A Simple Nim(简单Nim)

    p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...