.net web api 一
web api可以提供方便简单可靠的web服务,可以大量的用于不需要提供复杂的soap协议的环境,以简单明了的形式返回数据,在不太复杂的环境中web api可以做为wcf等重级web服务的一种可替代方案
在web世界中常常使用的方法有
GET
Post
PUT
DELETE
在controler中通常约定,方法名以以上get,post,put,delete打头,相关的请求将根据路由规则自动匹配相应的处理方式,如果需要自定义方法名,不希望以GET.Post,Put,Delete等来做为方法名的一部分,需要以在方法前加特性说做说明,如
[HttpGet]
[HttpPost]
[HttpPut]
[HttpDelete]

Views对于WebAPI来说没有太大的用途,Models中的Model主要用于保存Service和Client交互的对象,这些对象默认情况下会被转换为Json格式的数据进行传输,Controllers中的Controller对应于WebService来说是一个Resource,用于提供服务。和普通的MVC一样,Global.asax用于配置路由规则
以下为具体后台代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using webapi.Models;
namespace webapi.Controllers
{
public class UserController : ApiController
{
public static List<UserInfo> allModeList = new List<UserInfo>() {
new UserInfo(){ id=1,userName="zhang", password="123"},
new UserInfo(){ id=2,userName="lishi", password="123456"},
new UserInfo(){ id=3,userName="wang", password="1234567"}
};
public IEnumerable<UserInfo> getAll()
{
return allModeList;
}
[HttpGet]
public UserInfo findById(int id)
{
return allModeList.Find(p => p.id == id);
}
public bool PostNew(UserInfo user)
{
try
{
allModeList.Add(user);
return true;
}
catch (Exception)
{
return false;
}
}
[HttpDelete]
public bool RemoveAll()
{
return allModeList.RemoveAll(p=>p.id!=-1) > 0;
}
[HttpDelete]
public bool RemoveItemById(int id)
{
return allModeList.Remove(allModeList.Find(p => p.id == id));
}
public UserInfo getUserByName(string username)
{
return allModeList.Find(p => p.userName == username);
}
[HttpPut]
public void updateById(int id,UserInfo model)
{
UserInfo userInfoItem = allModeList.Find(p=>p.id==id);
allModeList.Remove(userInfoItem);
userInfoItem.userName = model.userName;
userInfoItem.password = model.password;
allModeList.Add(userInfoItem);
}
}
}
前台代码:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
@Scripts.Render("~/bundles/jquery")
<script type="text/javascript">
function getAll() {
$.ajax({
url: "/api/User/",
type: 'GET',
success: function (data) {
document.getElementById("modes").innerHTML = ""
$.each(data, function (key, val) {
str = val.id + ": " + val.userName + " : " + val.password
$('<li/>', { html: str }).appendTo($('#modes'))
console.log(key)
})
}
}).fail(function (xhr, textStatus, err) {
alert('error'+err)
})
}
function find() {
$.ajax({
url: '/api/User/1',
type: 'GET',
success: function (data) {
document.getElementById("modes").innerHTML = ""
str = data.userName + " : " + data.password
$('<li/>', { html: str }).appendTo($('#modes'))
}
}).fail(function (xhr, textstatus, err) {
alert('Error Info'+err)
})
}
function add() {
$.ajax({
url: "/api/user/",
type: "POST",
dataType: "json",
data: { 'id': 4, 'userName': 'test1', 'password': 'Pass@word' },
success: function (data) {
getAll()
}
}).fail(function (xhr, textstatus, err) {
alert("error"+err)
})
}
function removeAll()
{
$.ajax({
url: '/api/user/',
type: 'DELETE',
success: function (data) {
getAll()
}
}).fail(function (xhr,textstatus,err) {
alert('error'+err)
})
}
function removeUser() {
$.ajax({
url: '/api/user/1',
type: 'DELETE',
success: function (data) {
getAll()
}
}).fail(function (xhr, textstatus, err) {
alert("error"+err)
})
}
function getUserByName()
{
$.ajax({
url: '/api/user?username=zhang',
type: 'GET',
success: function (data) {
str=data.userName+": "+data.password
$('<li/>', { html: str }).appendTo($('#modes'))
console.log(data)
}
})
}
function udpate()
{
$.ajax({
url: '/api/user/2',
type: 'PUT',
dataType: 'json',
data: { Id: 2, "userName": "admin", "password": "666666" },
success: function (data) {
getAll()
}
}).fail(function (xhr, textstatus, err) {
alert('error'+err)
})
}
</script>
</head>
<body>
<div>
<button onclick="getAll()">getAll</button>
<button onclick="find()">find</button>
<button onclick="add()">add</button>
<button onclick="removeUser()">remove</button>
<button onclick="removeAll()">removeAll</button>
<button onclick="udpate()">udpate</button>
<button onclick="getUserByName()">getUserByName</button>
</div>
<div id="modes">
</div>
</body>
</html>
运行结果 :

.net web api 一的更多相关文章
- 在一个空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更新一个大对象中的某个字断,这才意识到我以前都没有用 ...
随机推荐
- ASP.NET内核几大对象、ASP.NET核心知识(7)--转载
本文的学习流程是这样安排的. 一个简单的GDI小案例 1.说明 如果你想思考如何生成验证码,那么您第一个要解决的问题,一定是.NET动态生成图片问题. //GDI:.Net程序中进行绘图的一些类. 2 ...
- 《JavaScript 闯关记》之 BOM
ECMAScript 是 JavaScript 的核心,但如果要在 Web 中使用 JavaScript,那么 BOM(浏览器对象模型)则无疑才是真正的核心.BOM 提供了很多对象,用于访问浏览器的功 ...
- 分享一个jdk源码链接
请查看下面的链接:http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/file/bcba89ce0a8c/src/share/classes/,进入页面后,点击列表中 ...
- Memcache入门知识
Memcache适合做缓存,是一款管理内存的很小的软件,实现对内存数据的管理,一般我们用memcache存储临时数据,因为内存不能储存永久化的数据,内存里面的数据,断电就消失了. memcache可以 ...
- android Unable to resolve target 'android-XX'错误和conversion to dalvik format failed with error 1错误
当用eclipse 导入一个已经存在的项目时,经常会遇见:Unable to resolve target 'android-XX' 类似的错误.这是因为导入的项目代码中project.propert ...
- Nginx限制模块研究
已有方案:无非两种 1. 限制连接个数: 是指一台机多线程或多进程开启请求. 解决方案-ngx_http_limit_conn_module 缺点: 定义$variable为单机时,只能限制已有ngi ...
- Qt 框架的图形性能高(OpenGL上的系统效率高),网络性能低,开发效率高,Quick是可以走硬件加速——Qt中分为好几套图形系统,差不多代表了2D描画的发展史。最经典的软描画系统
-----图形性能部分-----Qt的widgets部分,运行时的图像渲染性能是一般的,因为大部分的界面内容都是Qt自绘,没有走硬件加速,也就是说很多图形内容都是CPU算出来的.但是widgets底层 ...
- jQuery开发经验实例笔记
jQuery获取文件选择输入框的扩展名 var file=$("input[name='file']").val() var filename=file.replace(/.*(\ ...
- 关于Redis的一些常识
http://blog.csdn.net/mengxianhua/article/details/8961713 关于Redis的一些常识 2013-05-22 18:00 13315人阅读 评论(0 ...
- ubuntu下配置安装conky
由于默认的conky配置不好看,于是下载了一些配置,网上一抓一大把. 首先 sudo apt-get install conky-all 然后下载想要的配置文件,下载下来的是压缩文件,解压就行了,解 ...