首页 > 代码库 > WebAPI示例

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; }    }
View Code

  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);        }    }}
View Code

  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=1,Name="Product1",Price=20.23M,Stock=10},            new Product{ Pid=2,Name="Product2",Price=10.23M,Stock=0},            new Product{ Pid=3,Name="Product3",Price=100,Stock=5},            new Product{ Pid=4,Name="Product4",Price=20,Stock=20},        };        /// <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 + 1;            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;            }        }    }}
View Code

  测试页面内容

  

技术分享
@{    Layout = null;}<!DOCTYPE html><html><head>    <meta name="viewport" content="width=device-width" />    <title>Demo</title>    <link href="http://www.mamicode.com/~/Content/bootstrap.min.css" rel="stylesheet" />    <link href="http://www.mamicode.com/~/Content/Site.css" rel="stylesheet" />    <script src="http://www.mamicode.com/~/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>
View Code

  运行结果:

  技术分享

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

  

WebAPI示例