一、新建项目

二、

代码:

  Models.Products实体类  

    public class Product
{
/// <summary>
/// 产品编号
/// </summary>
public int Pid { get; set; }
/// <summary>
/// 产品名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 产品价格
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// 产品库存
/// </summary>
public int Stock { get; set; }
}

  ProductsController类  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebApiDemo.Infrastructure;
using WebApiDemo.Models; namespace WebApiDemo.Controllers
{
public class ProductsController : ApiController
{
//推荐使用锁机制,能有效规避多线程时创建多个实例问题。
private ProductRespository respo = ProductRespository.CurrentLock; public IEnumerable<Product> Get()
{
return respo.GetAll();
} public Product Get(int pid)
{
return respo.GetOneById(pid);
} public Product Post(Product product)
{
if (ModelState.IsValid)
{
product = respo.AddOne(product);
}
return product;
} public bool Put(Product product)
{
if (ModelState.IsValid)
{
return respo.Update(product);
}
return false;
} public bool Delete(int pid)
{
return respo.Remove(pid);
} }
}

  Infrastructure.ProductRespository类  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WebApiDemo.Models; namespace WebApiDemo.Infrastructure
{
public sealed class ProductRespository
{ //单例模式,先创建型(饿汉)
private static ProductRespository _currentHungry = new ProductRespository();
public static ProductRespository CurrentHungry
{
get { return _currentHungry; }
} //单例模式,按需创建型(懒汉)
//单例模式,先创建型(饿汉)
private static ProductRespository _currentLazy = null;
public static ProductRespository CurrentLazy
{
get
{
return _currentLazy ?? (_currentLazy = new ProductRespository());
}
} //单例模式,锁机制
private static object lockobj = new object();
private static ProductRespository _currentLock = null;
public static ProductRespository CurrentLock
{
get
{
if (_currentLock == null)
{
lock (lockobj)
{
if (_currentLock == null)
{
_currentLock = new ProductRespository();
}
}
}
return _currentLock;
}
} private List<Product> products = new List<Product>() {
new Product{ Pid=,Name="Product1",Price=20.23M,Stock=},
new Product{ Pid=,Name="Product2",Price=10.23M,Stock=},
new Product{ Pid=,Name="Product3",Price=,Stock=},
new Product{ Pid=,Name="Product4",Price=,Stock=},
}; /// <summary>
/// 获得所有产品
/// </summary>
/// <returns></returns>
public IEnumerable<Product> GetAll()
{
return products;
} /// <summary>
/// 根据ID选择产品
/// </summary>
/// <param name="pid">产品ID</param>
/// <returns></returns>
public Product GetOneById(int pid)
{
var selected = products.Where(p => p.Pid == pid).FirstOrDefault();
return selected;
} /// <summary>
/// 加入对象操作
/// </summary>
/// <param name="newitem"></param>
/// <returns></returns>
public Product AddOne(Product newitem)
{
newitem.Pid = products.Count + ;
products.Add(newitem);
return newitem;
} /// <summary>
/// 根据ID删除对象
/// </summary>
/// <param name="pid">待删除的对象的编号</param>
/// <returns></returns>
public bool Remove(int pid)
{
var item = GetOneById(pid);
if (item != null)
{
products.Remove(item);
return true;
}
return false;
} /// <summary>
/// 更新产品操作
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public bool Update(Product item)
{
var olditem = GetOneById(item.Pid);
if (olditem != null)
{
products.Remove(olditem);
products.Add(item);
return true;
}
else
{
return false;
}
} }
}

  测试页面内容

  

@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Demo</title>
<link href="~/Content/bootstrap.min.css" rel="stylesheet" />
<link href="~/Content/Site.css" rel="stylesheet" />
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
$(function () {
$("#getAllJson").click(function () {
AjaxHelper("get", "", "", function (data) {
$("#result").html(JSON.stringify(data));
})
});
$("#getAllXml").click(function () {
AjaxHelper("get", "", "XML", function (data) {
var oSerializer = new XMLSerializer();
var sXML = oSerializer.serializeToString(data);
$("#result").html(sXML);
})
});
$("#getOneJson").click(function () {
AjaxHelper("get", { "pid": 1 }, "Json", function (data) {
$("#result").html(JSON.stringify(data));
})
});
$("#postOneXml").click(function () {
AjaxHelper("post", { "Name": "Product5", "Price": 19.98, "Stock": 1 }, "Json", function (data) {
$("#result").html(JSON.stringify(data));
})
});
$("#putOneXml").click(function () {
AjaxHelper("Put", { "Pid": 5, "Name": "Product5+", "Price": 19.98, "Stock": 1 }, "Json", function (data) {
$("#result").html(JSON.stringify(data));
})
});
$("#delOneXml").click(function () {
AjaxHelper("DELETE", "", "Json", function (data) {
$("#result").html(JSON.stringify(data));
})
}); }); function AjaxHelper(_method, _data, _datatype, _success)
{
$.ajax({
url: "/Api/Products/5",
type: _method||"get",
data: _data,
dataType: _datatype||"Json",
success: _success
});
}
</script>
</head>
<body>
<div class="container">
<div class="row">
</div>
<div class="row">
<div class="btn-group">
<button id="getAllJson" class="btn btn-default">获得所有(Json)</button>
<button id="getAllXml" class="btn btn-default">获得所有(XML)</button>
<button id="getOneJson" class="btn btn-default">获得(id=1)</button>
<button id="postOneXml" class="btn btn-default">新建(post)</button>
<button id="putOneXml" class="btn btn-default">更新()</button>
<button id="delOneXml" class="btn btn-default">删除()</button>
</div>
</div>
<div class="row">
<div id="result"> </div>
</div>
</div>
</body>
</html>

  运行结果:

  

至此一个完整的WebAPIDemo创建完成。

  

WebAPI示例的更多相关文章

  1. ASP.NET MVC4 WebAPI若干要点

    本文仅仅是将一些可以运行无误的WebAPI示例的要点,记录下来,供自己查阅,也供刚刚学习WebAPI的读者参考之. 1.默认的API是不会过滤到action这个级别的,如果要过滤到这个级别,必须在路由 ...

  2. mvc中的webapi

    MVC中 webapi的使用 和 在其他网站中如何来调用(MVC) 1.webapi的路由规则注册在App_Start\WebApiConfig.cs文件中 2.webapi控制器继承父类 apiCo ...

  3. [开源]快速构建一个WebApi项目

    项目代码:MasterChief.DotNet.ProjectTemplate.WebApi 示例代码:https://github.com/YanZhiwei/MasterChief.Project ...

  4. Asp.Net WebApi学习教程之增删改查

    webapi简介 在asp.net中,创建一个HTTP服务,有很多方案,以前用ashx,一般处理程序(HttpHandler),现在可以用webapi 微软的web api是在vs2012上的mvc4 ...

  5. Asp.Net Core WebAPI入门整理(一)

    一.Asp.Net Core  WebAPI 1.目前版本是v1.1 2.默认路由处理和Asp.Net WebAPI有些 区别了,现在使用的是控制器路由[Route("api/Menu&qu ...

  6. 我的“第一次”,就这样没了:DDD(领域驱动设计)理论结合实践

    写在前面 插一句:本人超爱落网-<平凡的世界>这一期,分享给大家. 阅读目录: 关于DDD 前期分析 框架搭建 代码实现 开源-发布 后记 第一次听你,清风吹送,田野短笛:第一次看你,半弯 ...

  7. RESTful API URI 设计的一些总结

    非常赞的四篇文章: Resource Naming Best Practices for Designing a Pragmatic RESTful API 撰写合格的 REST API JSON 风 ...

  8. DDD(领域驱动设计)理论结合实践

    DDD(领域驱动设计)理论结合实践   写在前面 插一句:本人超爱落网-<平凡的世界>这一期,分享给大家. 阅读目录: 关于DDD 前期分析 框架搭建 代码实现 开源-发布 后记 第一次听 ...

  9. .NET Core微服务之基于Steeltoe集成Zuul实现统一API网关

    Tip: 此篇已加入.NET Core微服务基础系列文章索引,本篇接上一篇<基于Steeltoe使用Eureka实现服务注册与发现>,所演示的示例也是基于上一篇的基础上而扩展的. => ...

随机推荐

  1. 如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题?

    如何实现 MySQL 的读写分离? 其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去. MySQL 主从复制原理的是 ...

  2. spring读取配置文件,且获取bean实例

    import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.xml.Xm ...

  3. sql 日期对比

    来自这里

  4. tomcat的热部署配置

    1.什么是tomcat热部署? 所谓的tomcat热部署,就是在不重启tomcat服务器的前提下,将自己的项目部署到tomcat服务器中,这种方式是非常方便的,也称之为“开发即用”,热部署分为手动热部 ...

  5. 001 开发环境搭建、安卓项目结构、R文件位置、asset目录创建

    1.安卓开发平台搭建 (1)下载SDK基础工具包(自己的百度云中) (2)将下载的安装包(android-sdk_r24.4.1-windows.zip)解压后,放到以下路径 C:\SoftAppli ...

  6. Linux安全加固--系统相关

    一.系统相关 1.系统关键文件设置 1.1.设置文件初始权限 设置默认的umask值,增强安全性. [root@localhost ~]# umask 0022 /etc/profile最下面添加一行 ...

  7. gym 101889I Imperial roads 最小生成树+LCA

    题目传送门 题意: 给出一幅无向带权图,q次询问,每次询问都求一棵包含给出的边的最小生成树. 思路: 首先求出最小生成树(kruskal),如果查询的边在最小生成树上,肯定是直接输出最小生成树,如果不 ...

  8. Java的观察者

    class Teacher extends Observable { public void startLesson() { System.out.println(String.format(&quo ...

  9. Go语言基础之6--map(字典)数据类型

    一.map数据类型 1.1 声明和定义 map类型是一个key-value的数据结构,又叫字典.(map也是可以扩容的,内部自动扩容) 声明: var map1 map[keytype]valuety ...

  10. Robot Framework常用库简介

    标准库 Robot Framework可以直接导入使用的库,包括: • Builtin:包含经常需要的关键字.自动导入无需import,因此总是可用的 • Dialogs:提供了暂停测试执行和从用户的 ...