【源】

  来自微软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. ics OverbyteIcsHttpProt

    else begin { V7.05 begin } if (FRequestType = httpPOST) or (FRequestType = httpPUT) then begin {$IFD ...

  2. WPF中让TextBlock每一个字符显示不同的颜色

    XAML代码: <TextBlock x:Name="tb"> <Run Foreground="Red">R</Run> ...

  3. 关于帝国cms 列表页SEO优化的问题

    一般列表页面中,我们都需要带分页信息区分当前页号,为区分第一页,和第一页后的其他所有分页页面.我们推荐的做法为:第一页显示正常的标题,从第二页开始便显示xxxxx-第2页-xxxx网.做法是.修改帝国 ...

  4. easy ui 下拉框绑定数据select控件

    easy ui 中的下拉框控件叫做select,具体代码如下: html代码:①.这是一个公司等级的下拉框 <tr> <td>公司等级:</td> <td&g ...

  5. 微软职位内部推荐-Senior Data Scientist

    微软近期Open的职位: Extracting accurate, insightful and actionable information from data is part art and pa ...

  6. 文档翻译-Minimizing your app's Memory Footprint

    原文地址:https://developer.apple.com/library/ios/technotes/tn2434/_index.html#//apple_ref/doc/uid/DTS400 ...

  7. iOS 10 的适配问题-b

    随着iOS10发布的临近,大家的App都需要适配iOS10,下面是我总结的一些关于iOS10适配方面的问题,如果有错误,欢迎指出. 1.系统判断方法失效: 在你的项目中,当需要判断系统版本的话,不要使 ...

  8. 1044: [HAOI2008]木棍分割 - BZOJ

    Description 有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长 ...

  9. vi查找替换

    :n,$s/value1/value2/g 从第n行到最后一行,将value1替换成value2

  10. JSON用法简介

    [JSON简介] jsoncpp 主要包含三种类型的 class:Value.Reader.Writer.jsoncpp 中所有对象.类名都在 namespace Json 中,包含 json.h 即 ...