文档章节

c# 【MVC】WebApi开发实例

深圳大道
 深圳大道
发布于 2016/12/29 15:39
字数 831
阅读 20
收藏 0
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace ProductStore.Models
{
    //商品实体类
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Category { get; set; }
        public decimal Price { get; set; }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProductStore.Models
{
    //商品接口
    interface IProductRepository
    {
        IEnumerable<Product> GetAll();
        Product Get(int id);
        Product Add(Product item);
        void Remove(int id);
        bool Update(Product item);
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace ProductStore.Models
{
    //商品操作类
    public class ProductRepository : IProductRepository
    {
        private List<Product> products = new List<Product>();
        private int _nextId = 1;

        public ProductRepository()
        {
            Add(new Product { Name = "Tomato soup", Category = "Groceries", Price = 1.39M });
            Add(new Product { Name = "Yo-yo", Category = "Toys", Price = 3.75M });
            Add(new Product { Name = "Hammer", Category = "Hardware", Price = 16.99M });
        }

        public IEnumerable<Product> GetAll()
        {
            return products;
        }

        public Product Get(int id)
        {
            return products.Find(p => p.Id == id);
        }

        public Product Add(Product item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }

            item.Id = _nextId++;
            products.Add(item);
            return item;
        }

        public void Remove(int id)
        {
            products.RemoveAll(p => p.Id == id);
        }

        public bool Update(Product item)
        {
            if (item == null)
            {
                throw new ArgumentNullException("item");
            }
            int index = products.FindIndex(p => p.Id == item.Id);
            if (index == -1)
            {
                return false;
            }
            products.RemoveAt(index);
            products.Add(item);
            return true;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using ProductStore.Models;
using System.Text;

//控制器
namespace ProductStore.Controllers
{
    public class ProductsController : ApiController
    {
        /*
         * 微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,
         * 完全不同于之前的(同是SOAP协议的)wcf和webService,它是简单,代码可读性强的,上手快的,
         * 如果要拿它和web服务相比,我会说,它的接口更标准,更清晰,没有混乱的方法名称,
         * 
         * 有的只有几种标准的请求,如get,post,put,delete等,它们分别对应的几个操作,下面讲一下:
         * GET:生到数据列表(默认),或者得到一条实体数据
         * POST:添加服务端添加一条记录,记录实体为Form对象
         * PUT:添加或修改服务端的一条记录,记录实体的Form对象,记录主键以GET方式进行传输
         * DELETE:删除 服务端的一条记录         
         */
        static readonly IProductRepository repository = new ProductRepository();

        public IEnumerable<Product> GetAllProducts()
        {
            return repository.GetAll();
        }

        public Product GetProduct(int id)
        {
            Product item = repository.Get(id);
            if (item == null)
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
            return item;
        }

        public IEnumerable<Product> GetProductsByCategory(string category)
        {
            return repository.GetAll().Where(
                p => string.Equals(p.Category, category, StringComparison.OrdinalIgnoreCase));
        }

        public HttpResponseMessage PostProduct(Product item)
        {
            item = repository.Add(item);
            return new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent("add success", System.Text.Encoding.UTF8, "text/plain")
            };
        }

        public void PutProduct(int id, Product product)
        {
            product.Id = id;
            if (!repository.Update(product))
            {
                throw new HttpResponseException(HttpStatusCode.NotFound);
            }
        }

        public void DeleteProduct(int id)
        {
            repository.Remove(id);
        }
    }
}
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

<!DOCTYPE html>
<html>
<head runat="server">
    <meta name="viewport" content="width=device-width" />
    <title>测试Web Api - Jquery调用</title>
    <script src="../../Scripts/jquery-1.7.1.min.js" type="text/javascript"></script>
</head>
<body>
    <div>
    <fieldset>
        <legend>测试Web Api
        </legend>
        <a href="javascript:add()">添加(post)</a>
        <a href="javascript:update(1)">更新(put)</a>
        <a href="javascript:deletes(1)">删除(delete)</a>
        <a href="javascript:getall()">列表(Get)</a>
        <a href="javascript:getone()">实体(Get)</a>
    </fieldset>
    <table id="products">
    <thead>
        <tr><th>ID</th><th>Name</th><th>Category</th><th>Price</th></tr>
    </thead>
    <tbody id="looptr">
    </tbody>
    </table>
    <script type="text/javascript">
        $(function () {
            getall();
        });

        //获取列表
        function getall() {
            var str = "";
            $.getJSON("/api/products", function (products) {
                alert(JSON.stringify(products));
                $.each(products, function (index, product) {
                    str += "<tr>"
                    str += "<td>" + products[index].Id + "</td>";
                    str += "<td>" + products[index].Name + "</td>";
                    str += "<td>" + products[index].Category + "</td>";
                    str += "<td>" + products[index].Price + "</td>";
                    str += "<tr>"
                });
                $("#looptr").html(str);
            });
        }

        //获取某条信息
        function getone() {
            var str = "";
            $.getJSON("/api/products/1", function (product) {
                alert(JSON.stringify(product));
                str += "<tr>"
                str += "<td>" + product.Id + "</td>";
                str += "<td>" + product.Name + "</td>";
                str += "<td>" + product.Category + "</td>";
                str += "<td>" + product.Price + "</td>";
                str += "<tr>"
                $("#looptr").html(str);
            });
        }

        //新增
        function add() {
            $.ajax({
                url: "/api/products/",
                type: "POST",
                data: { "Id": 4, "Name": "test", "Category": "Parry", "Price": 239 },
                success: function (data) { alert(JSON.stringify(data)); }
            });
        }

        //更新
        function update(id) {
            $.ajax({
                url: "/api/products?id=4",
                type: "Put",
                data: { "Id": 1, "Name": "moditest", "Category": "Parry", "Price": 89 },
                success: function (data) { alert(JSON.stringify(data)); }
            });
        }

        //删除
        function deletes(id) {
            $.ajax({
                url: "/api/products/4",
                type: "DELETE",
                success: function (data) { alert(data); }
            });
        }
    </script>       
    </div>
</body>
</html>

本文转载自:http://blog.csdn.net/smartsmile2012/article/details/51612964

深圳大道
粉丝 3
博文 877
码字总数 0
作品 0
深圳
架构师
私信 提问
.NetCore2.1 WebAPI 根据swagger.json自动生成客户端代码

前言 上一篇博客中我们可以得知通过Swagger插件可以很方便的提供给接口开发者在线调试,但是实际上Swagger附带的功能还有很多, 比如使用NSwag生成客户端调用代码,进一步解放接口开发者。 ...

Bug帝
2018/07/11
0
0
[上海]大型企业招聘.net高级工程师

主要负责业务系统对外开放平台开发。 职位要求: 1.精通ASP.net开发技术,熟悉开发流程,熟悉C#语言、熟悉面向对象的软件分析、设计方法和设计模式 2.精通SQLServer2005\2008数据库,精通存储...

邬杰
2013/02/18
141
0
C#进阶系列——WebApi 接口参数不再困惑:传参详解

原文:C#进阶系列——WebApi 接口参数不再困惑:传参详解 前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料。如今,使用WebApi也有段时间了,今天就记录下API接口传...

杰克.陈
2017/12/19
0
0
《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明

1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制 一、综述 SuperIO(SIO)定位在PC终端(上位机)应用,它只有一个服务实例,配...

唯笑志在
2016/10/07
0
0
《连载 | 物联网框架ServerSuperIO教程》- 8.单例通讯模式开发及注意事项

1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。 《连载 | 物联网框架ServerSuperIO教程》2.服务实例的配置参数说明 《连载...

唯笑志在
2016/11/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

读书笔记:深入理解ES6 (五)

第五章 解构:使数据访问更便捷 第1节 为什么使用解构功能?   在ES5中,开发者们从对象、数组中获取特定数据并赋值给变量,编写了很多看起来同质化的代码。例如: 1 let options = {2 ...

张森ZS
8分钟前
7
0
CentOS7 yum方式安装MySQL5.7

在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB。 1 下载并安装MySQL官方的 Yum Repository [root@localho...

roockee
17分钟前
6
0
Allegro三种自定义设置快捷键的方法

Allegro自定义设置快捷键的三种方法: 1、在Allegro PCB editor 命令窗口直接定义 2、通过修改用户变量env文件来设置快捷键 3、定义笔画为快捷键 1、在Allegro PCB editor 命令窗口直接定义 ...

demyar
21分钟前
6
0
如何做一张能让人眼前一亮的大屏?

作为在职场驰骋的社会人,提到数据可视化大家应该都不陌生了。数据可视化的作用也不用我多说,主要是利用图形化手段,更清晰直观地将数据展示。多层次、交互式的可视化分析能够方便决策者理解...

朕想上头条
22分钟前
4
0
TL138/1808/6748-EthEVM开发板硬件CPU、FLASH、RAM

TL138/1808/6748-EthEVM是广州创龙基于SOM-TL138/1808/6748核心板开发的一款开发板,具有三个网络接口。由于SOM-TL138/1808/6748核心板管脚兼容,所以此三个核心板共用同一个底板。开发板采用...

Tronlong创龙
26分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部