WebAPI示例
一、新建项目
二、
代码:
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示例的更多相关文章
- ASP.NET MVC4 WebAPI若干要点
本文仅仅是将一些可以运行无误的WebAPI示例的要点,记录下来,供自己查阅,也供刚刚学习WebAPI的读者参考之. 1.默认的API是不会过滤到action这个级别的,如果要过滤到这个级别,必须在路由 ...
- mvc中的webapi
MVC中 webapi的使用 和 在其他网站中如何来调用(MVC) 1.webapi的路由规则注册在App_Start\WebApiConfig.cs文件中 2.webapi控制器继承父类 apiCo ...
- [开源]快速构建一个WebApi项目
项目代码:MasterChief.DotNet.ProjectTemplate.WebApi 示例代码:https://github.com/YanZhiwei/MasterChief.Project ...
- Asp.Net WebApi学习教程之增删改查
webapi简介 在asp.net中,创建一个HTTP服务,有很多方案,以前用ashx,一般处理程序(HttpHandler),现在可以用webapi 微软的web api是在vs2012上的mvc4 ...
- Asp.Net Core WebAPI入门整理(一)
一.Asp.Net Core WebAPI 1.目前版本是v1.1 2.默认路由处理和Asp.Net WebAPI有些 区别了,现在使用的是控制器路由[Route("api/Menu&qu ...
- 我的“第一次”,就这样没了:DDD(领域驱动设计)理论结合实践
写在前面 插一句:本人超爱落网-<平凡的世界>这一期,分享给大家. 阅读目录: 关于DDD 前期分析 框架搭建 代码实现 开源-发布 后记 第一次听你,清风吹送,田野短笛:第一次看你,半弯 ...
- RESTful API URI 设计的一些总结
非常赞的四篇文章: Resource Naming Best Practices for Designing a Pragmatic RESTful API 撰写合格的 REST API JSON 风 ...
- DDD(领域驱动设计)理论结合实践
DDD(领域驱动设计)理论结合实践 写在前面 插一句:本人超爱落网-<平凡的世界>这一期,分享给大家. 阅读目录: 关于DDD 前期分析 框架搭建 代码实现 开源-发布 后记 第一次听 ...
- .NET Core微服务之基于Steeltoe集成Zuul实现统一API网关
Tip: 此篇已加入.NET Core微服务基础系列文章索引,本篇接上一篇<基于Steeltoe使用Eureka实现服务注册与发现>,所演示的示例也是基于上一篇的基础上而扩展的. => ...
随机推荐
- 数据结构1:数据结构与算法C语言版分析概述
本节开始将带领大家系统地学习数据结构,作为一门计算机专业大二学生的必修课程,该课程面对的目标人群为初步具备基本编程能力和编程思想的程序员(大一接触了 C 语言或者 C++).通过系统地学习数据结构,可 ...
- sklearn.metrics.roc_curve使用说明
roc曲线是机器学习中十分重要的一种学习器评估准则,在sklearn中有完整的实现,api函数为sklearn.metrics.roc_curve(params)函数. 官方接口说明:http://s ...
- java中\r ,\n,\t等的含义
\t 相当于tab,缩进,制表符\n NewLine 换行 \f 换页符 \r 回车 \" 转义 “\\ 转义 \
- Nginx多域名负载均衡配置
Nginx负载均衡设置 环境: 负载均衡:192.168.188.128:80 Web1:192.168.188.128:81 Web2:192.168.188.129:80 正式环境中,需要解析域名 ...
- 洛谷2015(树形dp)
要点 是树形的考虑dfs 分为取一枝,取两枝两种情况,将它们的合法情况进行暴举取最好答案即可,貌似我乱搞得相当冗-- 顺手记忆化 正解应该是树上背包 #include <cstdio> # ...
- 求(3+开根5) N次方的整数部分最后3位
求(3+开根5) N次方的整数部分最后3位,请补足前导零 . 分析:首先(1)=(3+开根5) N次方的展开为 an + bn * 根号5 的形式 . 同时也有 (2)=(3-开根5) N次方 = ...
- BestCoder Round #64 1002
Sum Accepts: 322 Submissions: 940 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/655 ...
- day_05 字典
1. 字典 1.成对保存数据 ,以key:value形式保存 2.以{}表示,每项内容都是key:value,元素之间用逗号隔开 3.key是不可重复的 4.字典以hash算法来计算key的hash值 ...
- ymPrompt.js消息提示组件
转载:https://www.cnblogs.com/linzheng/archive/2010/11/15/1878058.html 使用说明: 1.在页面中引入ymPrompt.js.如:< ...
- win安装wordcloud报错解决方案
可以知道需要安装的是32位系统上的python 3.6.5版本的 ②登陆 https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud 网址找到相应文件 ...