[.NET WebAPI系列01] WebAPI 简单例子
【源】
来自微软WebAPI官方视频,Introduction to the ASP.NET Web API --Uniform Interface -- Demo-Using convention 这一节。
先上一张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 简单例子的更多相关文章
- Spring框架系列(2) - Spring简单例子引入Spring要点
上文中我们简单介绍了Spring和Spring Framework的组件,那么这些Spring Framework组件是如何配合工作的呢?本文主要承接上文,向你展示Spring Framework组件 ...
- [.NET WebAPI系列02] WebAPI 中的HTTP通信
[前言] 本节用于承上启下,通过第一节了解的WebAPI的基本语法,Controller CRUD方法的基本格式: 但很多场合,第一节中的Web API Controller方法返回的信息 过于简单, ...
- [.NET WebAPI系列03] WebAPI Controller 中标准CRUD方法
[因] WebAPI的Controller中,一般都是下面四种方法: 对应于数据操作是我们通常所说的CRUD. C对应post,R对应Get,U对应Put,D对应Delete. 直接模仿VS 2012 ...
- WebApi系列~在WebApi中实现Cors访问
回到目录 说在前 Cors是个比较热的技术,这在蒋金楠的博客里也有体现,Cors简单来说就是“跨域资源访问”的意思,这种访问我们指的是Ajax实现的异步访问,形象点说就是,一个A网站公开一些接口方法, ...
- python3发送邮件01(简单例子,不带附件)
# -*- coding:utf-8 -*-import smtplibfrom email.header import Headerfrom email.mime.text import MIMET ...
- WebApi系列~目录
回到占占推荐博客索引 写了这个系列的文章不少了,也应该为大家写个目录了,最近很刮了很多SOA的风,很多企业都将自己的系统进行分割,通常是按模块进行拆分,为这个模块提供统一的接口提供业务服务,这不紧可以 ...
- 【WebApi系列】浅谈HTTP
[01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi如何传递参数 [04]详解WebApi测试和PostMan [05]浅谈WebApi Core ...
- 【WebApi系列】详解WebApi如何传递参数
WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...
- 【WebApi系列】浅谈HTTP在WebApi开发中的运用
WebApi系列文章 [01]浅谈HTTP在WebApi开发中的运用 [02]聊聊WebApi体系结构 [03]详解WebApi参数的传递 [04]详解WebApi测试和PostMan [05]浅谈W ...
随机推荐
- STM8S003K3用Tim1的通道4输出20KHz的PWM波
void Init_pwm(){TIM1_DeInit(); TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 800, 0x00);//250 TIM1_OC4In ...
- MYsqli 绑定插入与查询实例
<?php $conn = new mysqli('localhost','root','','orders'); //连接 $prepare = "insert into t100 ...
- iPhone手机屏幕的尺寸
以下是 iPhone的型号和对应的屏幕宽高 英寸 宽 高 厚度 3.5 320 480 4s ipad 系列 4 320 568 5 5s 4.7 375 66 ...
- Linux中的MyEclipse配置Hadoop
一.所需软件 注意:安装MyEclipse后,我再已安装软件里找不到MyEclipse,所以我在root权限下用命令行启动MyEclipse,貌似避免了很多权限问题. sudo su 输入密码 cd ...
- [转载]VS2012创建MVC3项目提示错误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”。
如果在没有安装vs2012 update3升级包的情况下,创建MVC3项目会出现下面的错误信息. 因为VS2012已经全面切换到使用NuGet这个第三方开源工具来管理项目包和引用模块了,使用VS201 ...
- VB将PDF流写入ACCESS数据库,通过AcroPDF控件读出PDF流之实现
问题描述: 1.把pdf文件写入access2.读出时用AcroPDF控件 问题解答: 使用流对象保存和显示图片与文件打开vb6,新建工程. 添加两个按钮,一个image控件注意:Access中的ph ...
- PHP获取APP客户端的IP地址的方法
分析php获取客户端ip 用php能获取客户端ip,这个大家都知道,代码如下: /** * 获取客户端ip * @param number $type * @return string */ func ...
- Codeforces Round #243 (Div. 2) A~C
题目链接 A. Sereja and Mugs time limit per test:1 secondmemory limit per test:256 megabytesinput:standar ...
- 推荐牛X的一本JS书
主要是看阮一峰的教程时,他参考书目里有这一本中文的, 找来一看,果然高.. 练习一下. function Base(name) { this.name = name; this.getName = f ...
- lsof命令总结
1.lsof 简介 lsof 是 linux 下的一个非常实用的系统级的监控.诊断工具.它的意思是 List Open Files,很容易你就记住了它是 “ls + of”的组合~它可以用来列出被各种 ...