【源】

  来自微软WebAPI官方视频,Introduction to the ASP.NET Web API --Uniform Interface -- Demo-Using convention 这一节。

  http://pluralsight.com/training/Player?author=jon-flanders&name=aspnetwebapi-m1-introduction&mode=live&clip=0&course=aspnetwebapi

先上一张WebAPI中所有用户Controller都必须继承的ApiController基类代码:

  

【详】

  1.VS 2012中新建一MVC4的WebAPI项目;

2.添加CoursesController空WebAPI控制器,代码如下: 

 namespace WebApiDemo.Controllers
{
public class course
{
public int id;
public string title;
}
public class CoursesController : ApiController
{
static List<course> courses = InitCourses();
private static List<course> InitCourses()
{
var ret = new List<course>();
ret.Add(new course { id = , title = "Web Api" });
ret.Add(new course { id = , title = "Mobile programing" });
return ret;
} public IEnumerable<course> Get()
{
return courses;
} }
}

  3.在HomeView中呈现:

  更改/Views/Home/Index.cshtml代码,使其和下面代码相同;

 <div id="body">
<ol id="courses"> </ol>
</div>
@section scripts
{
<script>
$.ajax({
url: '/api/courses',
success: function (courses) {
var list = $('#courses');
for (var i = 0; i < courses.length; i++)
{
var course = courses[i];
list.append('<li>' + course.title + '</li>');
}
} });
</script>
}

  注意:

    1) 原理:用jQuery代码,指定要访问的url是coursescontroller所在uri,从而获取courses的json数据;

        如果获取成功,执行success后代码,通过循环将li添加到指定的ol中。

    2)ol标签的id必须为courses,和下面$('#courses')中的相同,否则挂不上;

       url、success等关键字也不能写错,否则运行不出,而且jQuery错误比较难查。

【果】

  最终效果:

  

【update】
  上面紧紧展示了GETALL的用法,CRUD补全后的Controller如下:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http; namespace WebApiDemo.Controllers
{
public class course
{
public int id;
public string title;
}
public class CoursesController : ApiController
{
static List<course> courses = InitCourses();
private static List<course> InitCourses()
{
var ret = new List<course>();
ret.Add(new course { id = , title = "Web Api" });
ret.Add(new course { id = , title = "Mobile programing" });
return ret;
} // GET api/courses
public IEnumerable<course> Get()
{
return courses;
} // GET api/courses/id
public course Get(int id)
{
var ret=(from c in courses
where c.id==id
select c).FirstOrDefault();
//todo: if null- should return 404
return ret;
} // Post api/courses
public void Post([FromBody]course c)
{
c.id = courses.Count;
courses.Add(c);
//TODO:: should return a 201 with a location head } // Put api/courses/id
public void Put(int id, [FromBody]course c)
{
var ret = (from v in courses
where v.id == c.id
select v).FirstOrDefault();
ret.title = c.title;
} // Delete api/courses/id
public void Delete(int id)
{
var ret = (from c in courses
where c.id == id
select c).FirstOrDefault();
courses.Remove(ret);
}
}
}

  在此就不再为每个方法创建视图了,如果想要测试结果,可以使用视频中推荐的"Fiddler Web Debugger",官网:fiddler2.com

  另外,如果不想使用Get、Put、Delete、Post作为WebApi Controller CRUD的方法名,就需要在自定义方法明前标注Attribute:

  • C :[HttpPost]
  • R  : [HttpGet]
  • U  : [HttpPut]
  • D  : [HttpDelete]

  如:

 // GET api/courses
[HttpGet]
public IEnumerable<course> AllCourses()
{
return courses;
}

【知识点解析】

  1.WebAPi Controller 方法参数中的[FromBody]&[FromUri],称为ModleBinding attribute

   参数前缀修饰,用来指定参数值的来源。

   FromBody:指示当前参数来源自HTML 的Body中,body只能被读取一次;

   FromUri:指示当前参数来源于URL,比如QuerryString。

   被修饰的参数,就不需要再给形参赋值,

   WebAPI会自动将URI或HTTP Body中符合要求的数据绑定到方法中

[.NET WebAPI系列01] WebAPI 简单例子的更多相关文章

  1. Spring框架系列(2) - Spring简单例子引入Spring要点

    上文中我们简单介绍了Spring和Spring Framework的组件,那么这些Spring Framework组件是如何配合工作的呢?本文主要承接上文,向你展示Spring Framework组件 ...

  2. [.NET WebAPI系列02] WebAPI 中的HTTP通信

    [前言] 本节用于承上启下,通过第一节了解的WebAPI的基本语法,Controller CRUD方法的基本格式: 但很多场合,第一节中的Web API Controller方法返回的信息 过于简单, ...

  3. [.NET WebAPI系列03] WebAPI Controller 中标准CRUD方法

    [因] WebAPI的Controller中,一般都是下面四种方法: 对应于数据操作是我们通常所说的CRUD. C对应post,R对应Get,U对应Put,D对应Delete. 直接模仿VS 2012 ...

  4. WebApi系列~在WebApi中实现Cors访问

    回到目录 说在前 Cors是个比较热的技术,这在蒋金楠的博客里也有体现,Cors简单来说就是“跨域资源访问”的意思,这种访问我们指的是Ajax实现的异步访问,形象点说就是,一个A网站公开一些接口方法, ...

  5. python3发送邮件01(简单例子,不带附件)

    # -*- coding:utf-8 -*-import smtplibfrom email.header import Headerfrom email.mime.text import MIMET ...

  6. WebApi系列~目录

    回到占占推荐博客索引 写了这个系列的文章不少了,也应该为大家写个目录了,最近很刮了很多SOA的风,很多企业都将自己的系统进行分割,通常是按模块进行拆分,为这个模块提供统一的接口提供业务服务,这不紧可以 ...

  7. 【WebApi系列】浅谈HTTP

    [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi如何传递参数 [04]详解WebApi测试和PostMan [05]浅谈WebApi Core ...

  8. 【WebApi系列】详解WebApi如何传递参数

    WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...

  9. 【WebApi系列】浅谈HTTP在WebApi开发中的运用

    WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...

随机推荐

  1. STM8S003K3用Tim1的通道4输出20KHz的PWM波

    void Init_pwm(){TIM1_DeInit(); TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 800, 0x00);//250 TIM1_OC4In ...

  2. MYsqli 绑定插入与查询实例

    <?php $conn = new mysqli('localhost','root','','orders'); //连接 $prepare = "insert into t100 ...

  3. iPhone手机屏幕的尺寸

    以下是 iPhone的型号和对应的屏幕宽高 英寸  宽 高  厚度 3.5   320 480 4s      ipad   系列   4   320 568 5   5s   4.7  375 66 ...

  4. Linux中的MyEclipse配置Hadoop

    一.所需软件 注意:安装MyEclipse后,我再已安装软件里找不到MyEclipse,所以我在root权限下用命令行启动MyEclipse,貌似避免了很多权限问题. sudo su 输入密码 cd ...

  5. [转载]VS2012创建MVC3项目提示错误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”。

    如果在没有安装vs2012 update3升级包的情况下,创建MVC3项目会出现下面的错误信息. 因为VS2012已经全面切换到使用NuGet这个第三方开源工具来管理项目包和引用模块了,使用VS201 ...

  6. VB将PDF流写入ACCESS数据库,通过AcroPDF控件读出PDF流之实现

    问题描述: 1.把pdf文件写入access2.读出时用AcroPDF控件 问题解答: 使用流对象保存和显示图片与文件打开vb6,新建工程. 添加两个按钮,一个image控件注意:Access中的ph ...

  7. PHP获取APP客户端的IP地址的方法

    分析php获取客户端ip 用php能获取客户端ip,这个大家都知道,代码如下: /** * 获取客户端ip * @param number $type * @return string */ func ...

  8. Codeforces Round #243 (Div. 2) A~C

    题目链接 A. Sereja and Mugs time limit per test:1 secondmemory limit per test:256 megabytesinput:standar ...

  9. 推荐牛X的一本JS书

    主要是看阮一峰的教程时,他参考书目里有这一本中文的, 找来一看,果然高.. 练习一下. function Base(name) { this.name = name; this.getName = f ...

  10. lsof命令总结

    1.lsof 简介 lsof 是 linux 下的一个非常实用的系统级的监控.诊断工具.它的意思是 List Open Files,很容易你就记住了它是 “ls + of”的组合~它可以用来列出被各种 ...