Web API Get Started First
注:此博客是自官网修剪而来,博主IT新手
一、web api与web service的不同:
web api是基于Http协议,而web service是基于soap协议。两协议的区别小子看了很多,但是理解不了解释不清晰就不赘述,请各位读者自行找其他大神。
Http除了提供网页,还是一个用于创建API提供服务和数据的强大平台,Http是简单、灵活、适用性极强的。几乎所有的平台都有提供Http的服务包,因此http协议在客户端、浏览器端、移动端以及传统的桌面端都具有广泛的应用。
二、创建第一个web api应用程序:
1、创建一个MVC,选择web api类型:
2、创建一个Model类,名称为Product:
namespace WebAPI2.Models
{
public class Product
{
public int Id { get; set; } public string Name { get; set; } public int Price { get; set; } public string Style { get; set; }
}
}
3、创建一个控制器,名称是ProductController,在这个控制器的当中我们对Product进行初始化,在正规的程序当中我们是不这么做的,我们需要在建立数据库,使用EF或者是Ado.Net来访问数据,但是在这里为了方便我们只在控制器当中进行了初始化(创建一个数组,类型是Product):
public Product[] products = {
new Product() {Id=,Name="SuJinBiao",Price=,Style="A" },
new Product() {Id=,Name="HouWeiXin",Price=,Style="B" },
new Product() {Id=,Name="HuangYuanPei",Price=,Style="C" },
new Product() {Id=,Name="ZhangJinKun",Price=,Style="D" },
new Product() {Id=,Name="ChenZeYu",Price=,Style="E" },
};
4、创建两个action,分别是获取全部Product以及按照Id进行查询:
public IEnumerable<Product> GetAllProducts() {
return products;
} public IEnumerable<Product> GetProductById(int id) {
var product = products.Where(o => o.Id == id).FirstOrDefault();
if (product==null) {
//return NotFound();
}
return (IEnumerable<Product>)product;
}
5、接下来我们需要访问数据,使数据显示出来,在View文件夹下的Home中,我们把index进行修改,删掉所有内容,然后添加Html代码如下:
<h1>ALL Products</h1>
<ul id="products"></ul>
<br />
<h3>Search Results</h3>
ID:<input type="text" id="searchBy" /><input type="button" id="search" value="Search"/>
<label id="result"></label>
6、接下来使用ajax访问数据,为了方便我们使用的是jQuery已经封装好的ajax:
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(function () {
var $productUl = $("#products");
var $search = $("#search");
var $result = $("#result"); $.get("api/Product", function (data) {
$.each(data, function (key, val) {
$productUl.append("<li>" + data[key].Name + ":" + val.Price + "</li>");
}); }); $search.click(function () {
var searchBy = $("#searchBy").val();
$.get("api/Product/" + searchBy, function (data) {
$result.text("Price: $"+data.Price);
});
});
});
</script>
7、运行程序我们会发现数据被显示出来了:
如图,在搜索框中按照Id我们可以进行搜索,搜索的结果显示在按钮的后面。
8、按照习惯插入一张导图:
9、发散:
(1)、路由是怎样的呢?
web api的路由的设置和mvc的路由设置是类似的,位置就在App _Start文件夹下面的webconfig文件当中,可以如MVC的路由一般修改规则:
在web api的路由当中,我们来看看默认的路由:“api/{controller}/{id}”;这其中,api是文字标识路径,与MVC的路由进行区分,而{controller}和{Id}则是占位符变量。
当应用程序根据请求查找到匹配的路由之后,就开始进行控制器的匹配和action的对应,这又是一个很有意思的事情。
按照官网的说法,当要进行action的匹配的时候,需要它首先找的是action的方法开头,如果客户端返回的是一个get请求,那么就找控制器当中的get请求方法,然后再进行匹配参数是否一致。如果在控制器的get方法当中没有找到(比如说我们狡猾的把开头给改成了post,而方法体是没有改变的),那么该程序就会觉得没有相应的action,所以为了给我们好体验返回GetAll()方法的结果。这就要求我们在定义的时候不仅仅是参数要进行匹配,对于action的方法名称也要进行匹配限制。
以下是我把action的get改成了post的结果:
而事实上如果我没有修改那么结果就应该是:
接下来我们来看看我们使用route特性之后的结果:
然后再看看我们的Route特性设置:
如果我们进行修改:
那么结果依旧是(注意观察地址栏的变化哦):
博主注:不好意思IT新人哈,写的比较浅,也很粗糙,希望大家批评指正(因为接触的少,所以我也不知道到底正确性是多少。但是看了很多大神的博客,感觉受益匪浅,厚脸皮来写博客,希望分享知识共同交流,为中国的IT事业贡献力量,加油)。
Web API Get Started First的更多相关文章
- 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用
由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...
- bootstrap + requireJS+ director+ knockout + web API = 一个时髦的单页程序
也许单页程序(Single Page Application)并不是什么时髦的玩意,像Gmail在很早之前就已经在使用这种模式.通常的说法是它通过避免页面刷新大大提高了网站的响应性,像操作桌面应用程序 ...
- Hello Web API系列教程——Web API与国际化
软件国际化是在软件设计和文档开发过程中,使得功能和代码设计能处理多种语言和文化习俗,在创建不同语言版本时,不需要重新设计源程序代码的软件工程方法.这在很多成熟的软件开发平台中非常常见.对于.net开发 ...
- ASP.NET Web API 跨域访问(CORS)
一.客户端用JSONP请求数据 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignatu ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- Web APi之认证(Authentication)两种实现方式【二】(十三)
前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...
- angular2系列教程(八)In-memory web api、HTTP服务、依赖注入、Observable
大家好,今天我们要讲是angular2的http功能模块,这个功能模块的代码不在angular2里面,需要我们另外引入: index.html <script src="lib/htt ...
- 我这么玩Web Api(二):数据验证,全局数据验证与单元测试
目录 一.模型状态 - ModelState 二.数据注解 - Data Annotations 三.自定义数据注解 四.全局数据验证 五.单元测试 一.模型状态 - ModelState 我理解 ...
- 我这么玩Web Api(一):帮助页面或用户手册(Microsoft and Swashbuckle Help Page)
前言 你需要为客户编写Api调用手册?你需要测试你的Api接口?你需要和前端进行接口对接?那么这篇文章应该可以帮到你.本文将介绍创建Web Api 帮助文档页面的两种方式,Microsoft Help ...
- [译] 在Web API 2 中实现带JSON的Patch请求
原文链接:The Patch Verb in Web API 2 with JSON 我想在.NET4.6 Web API 2 项目中使用Patch更新一个大对象中的某个字断,这才意识到我以前都没有用 ...
随机推荐
- PHP中常见的提示对照表
.Notice: Undefined variable: 变量名 in 注:使用了一个没有被定义的变量 .Parse error: syntax error, unexpected T_ELSE in ...
- mysql使用load导入txt文件所遇到的问题及解决方法
导入txt文件,有导入向导这种方式: 另外可以使用load的方式导入.最开始使用以下代码插入: load data local infile 'F:\\Data\\predict_data.txt' ...
- ms08-067漏洞--初识渗透测试--想必很多初学者都会遇到我文中提及的各种问题
最近读了一本书--<<渗透测试实践指南>>,测试了书中的一些例子后,开始拿ms08-067这个经典的严重漏洞练手,实践当中遇到诸多问题,好在一一解决了,获益匪浅. 在谷歌搜索的 ...
- Linux下用户组、文件权限详解
在linux中的每个用户必须属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念 - 所有者 - 所在组 - 其它组 - 改变用户所在的组 所有者 一般为文件的创建者,谁创 ...
- window下安装anaconda ipython和spyder都打不开
1. 环境 win7 64位,软件是Anaconda2-4.1.1-Windows-x86_64.exe 2. 出现的问题 ipython打不开,一闪而过 spyder点击没有反应 anaconda ...
- ios Carthage
使用CocoaPods来管理第三方框架很多人都知道,相对来说Carthage比较陌生,Carthage也是来管理第三方框架的,既然已经有了Cocoapods为什么还要有Carthage呢?使用Cart ...
- 【jquery】基础知识
jquery简介 1 jquery是什么 jquery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. jQuery是继prototype之后 ...
- cookie的存储和获取
在做用户登录时经常会用到cookie,如何将用户名和密码保存至cookie中呢?如何获取cookie中的数据呢? 一.用jquery.cookie.js保存数据 在页面内引入jQuery.cookie ...
- 一键启动NameNode和DataNode--shell脚本
使用shell脚本,一键启动hadoop中的NameNode和DataNode.分为普通版和装逼版.装逼版较普通版多了很多判断和信息提示,当然主要还是为了我联系shell脚本而写的. 如果想实现复用, ...
- 使用dd命令备份Linux分区
为了备份分区,开始使用的是Remastersys,但最终生成的iso文件仅有几十K,应该是软件bug,且此软件不再更新,后尝试使用Linux Respin,但github一直连接不上. 其实可以尝试使 ...