上一篇介绍了ASP.NET Web API的基本知识和原理,这一篇我们通过一个更直观的实例,对产品进行CRUD操作(Create/Read/Update/Delete)来继续了解一下它的基本应用。

创建ASP.NET Web API应用程序 

在VS中选择创建一个ASP.NET Web Application应用程序,在向导的下一个窗口中选择Web API模板。

创建Model

这里我们在Models文件夹下创建一个简单的Product model类,用来传递数据。

Models文件夹上点击右键,选择Add -> Class

    public class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public decimal Price { get; set; }
public int Count { get; set; }
public string Description { get; set; }
}

创建Controller

接着在Controllers文件夹下创建一个API Controller, 命名为"ProductsController"。

Controllers文件夹上点击右键,选择Add -> Controller ,在弹出向导中选择Web API 2 Controller - Empty

在向导下一步中输入API Controller name为"ProductsController"。

创建Web API方法(CRUD)并通过JQuery和Ajax进行数据操作

1.获取Product列表

首先打开ProductsController文件,添加模拟数据以及获取Product列表的方法。

    public class ProductsController : ApiController
{
// Mock product list
static List<Product> productMockList = initProductMockDataList(); private static List<Product> initProductMockDataList()
{
return new List<Product>()
{
new Product {ProductID=,ProductName="Product A",Price=,Count=,Description="Description A"},
new Product {ProductID=,ProductName="Product B",Price=,Count=,Description="Description B"},
new Product {ProductID=,ProductName="Product C",Price=,Count=,Description="Description C"},
new Product {ProductID=,ProductName="Product D",Price=,Count=,Description="Description D"},
new Product {ProductID=,ProductName="Product E",Price=,Count=,Description="Description E"}
};
} // GET api/products
public IEnumerable<Product> GetAllProducts()
{
return productMockList;
}
}

接着在文件夹Views->Product下创建一个View,名为"Index"。这里我们需要实现的是点击Get Product List按钮获取Product List数据,修改代码如下:

@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
</head>
<body>
<p><h2>ASP.NET Web API (CRUD)</h2></p>
<div>
<input id="btnGetProductList" name="btnGetProductList" type="button" value="Get Product List" />
<div id="productsBlock" style="padding-top:10px;display:none;">
<div style="padding-left:5px;">Product List</div>
<div id="products"></div>
</div>
</div> <script>
// Click get product list
$('#btnGetProductList').click(function () {
LoadProductList();
}); // Load product list
function LoadProductList() {
$.ajax({
url: '/api/products',
contentType: 'application/html; charset=utf-8',
type: 'GET',
dataType: 'json'
}).success(function (result) {
$('#productsBlock').show();
DisplayProductList(result);
}).error(function (data) {
alert(data);
});
}
// Display product list
function DisplayProductList(result) {
var productTable = $("<table cellpadding='5' cellspacing='5'></table>");
var productTableTitle = $("<tr style='background-color:#7FBA00;'><th>Product ID</th><th>Product Name</th><th>Price</th><th>Count</th><th>Description</th></tr>");
productTableTitle.appendTo(productTable); for (var i = ; i < result.length; i++) {
var productTableContent = $("<tr style='background-color: #7FBA00; color: white;'><td>"
+ result[i].ProductID + "</td><td>"
+ result[i].ProductName + "</td><td>"
+ result[i].Price + "</td><td>"
+ result[i].Count + "</td><td>"
+ result[i].Description + "</td></tr>"); productTableContent.appendTo(productTable);
} $('#products').html(productTable);
}
</script>
</body>
</html>

运行代码,点击Get Product List按钮之前。

点击Get Product List按钮之后

2.获取一条Product数据

这里我们的做法是点击列表右侧View链接,获取当前Product数据,并显示到列表下方各个字段对应的文本框中。

首先我们先完成Web API中获取一条Product数据的方法。

        // GET api/products/?
public Product GetProdcut(int id)
{
return productMockList.Where(p => p.ProductID == id).FirstOrDefault();
}

接着,在Product列表中添加一列View,在列表下面添加对应各个字段的textbox。实现点击View链接,获取当前Product数据,然后显示到对应的文本框中。

@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
</head>
<body>
<p><h2>ASP.NET Web API (CRUD)</h2></p>
<div>
<input id="btnGetProductList" name="btnGetProductList" type="button" value="Get Product List" />
<div id="productsBlock" style="padding-top:10px;display:none;">
<div style="padding-left:5px;">Product List</div>
<div id="products"></div>
<div id="editProductBlock" style="padding:10px;width:20%;border:1px solid green;display:none;">
<div style="font-weight:bold;">Edit Product</div>
<table>
<tr><td>Product ID:</td><td><input id="txtProductID" name="txtProductID" type="text" disabled /></td></tr>
<tr><td> Product Name:</td><td><input id="txtProductName" name="txtProductName" type="text" /></td></tr>
<tr><td>Count:</td><td><input id="txtCount" name="txtCount" type="text" /></td></tr>
<tr><td> Price:</td><td><input id="txtPrice" name="txtPrice" type="text" /></td></tr>
<tr><td> Description:</td><td><input id="txtDescription" name="txtDescription" type="text" /></td></tr>
</table>
<div style="padding-top:5px;">
<div id="message" style="color:green;"></div>
<input id="btnSave" name="btnSave" type="button" value="Save" />
</div>
</div>
</div>
</div> <script>
// Click get product list
$('#btnGetProductList').click(function () {
LoadProductList();
}); // Load product list
function LoadProductList() {
$.ajax({
url: '/api/products',
contentType: 'application/html; charset=utf-8',
type: 'GET',
dataType: 'json'
}).success(function (result) {
$('#productsBlock').show();
DisplayProductList(result);
}).error(function (data) {
alert(data);
});
}
// Display product list
function DisplayProductList(result) {
var productTable = $("<table cellpadding='5' cellspacing='5'></table>");
var productTableTitle = $("<tr style='background-color:#7FBA00;'><th>Product ID</th><th>Product Name</th><th>Price</th><th>Count</th><th>Description</th><th></th></tr>");
productTableTitle.appendTo(productTable); for (var i = ; i < result.length; i++) {
var productTableContent = $("<tr style='background-color: #7FBA00; color: white;'><td>"
+ result[i].ProductID + "</td><td>"
+ result[i].ProductName + "</td><td>"
+ result[i].Price + "</td><td>"
+ result[i].Count + "</td><td>"
+ result[i].Description + "</td>"
+ "<td><a href='#' onclick='ViewProduct(" + result[i].ProductID + ")'>View</a></td></tr>"); productTableContent.appendTo(productTable);
} $('#products').html(productTable);
} // View product
function ViewProduct(productId) {
$('#editProductBlock').show(); $.ajax({
url: '/api/products/' + productId,
contentType: 'application/html;charset=utf-8',
type:'GET'
}).success(function (result) {
if (result != null) {
$("#txtProductID").val(result.ProductID);
$("#txtProductName").val(result.ProductName);
$("#txtCount").val(result.Count);
$("#txtPrice").val(result.Price);
$("#txtDescription").val(result.Description);
}
}).error(function (data) {
alert(data);
})
}
</script>
</body>
</html>

运行程序
点击Get Product List按钮获取列表数据,显示如下。

接着点击列表中任意记录右边的View链接,这里我们点击第一条数据View链接,显示如下。

3.新增一条Product

这里我们需要一个Create Product的按钮,然后利用上面创建的TextBox来实现新增数据功能。

首先我们先完成Web API中新增Product数据的方法。

        // POST api/products
public void CreateProduct([FromBody]Product product)
{
var lastProduct = productMockList.OrderByDescending(p => p.ProductID).FirstOrDefault();
int newProductID = lastProduct.ProductID + ;
product.ProductID = newProductID; productMockList.Add(product);
}

接着我们修改Index View页面实现新增Product

@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<script src="~/Scripts/jquery-1.10.2.min.js" type="text/javascript"></script>
</head>
<body>
<p><h2>ASP.NET Web API (CRUD)</h2></p>
<div>
<input id="btnGetProductList" name="btnGetProductList" type="button" value="Get Product List" />
<div id="productsBlock" style="padding-top:10px;display:none;">
<div style="padding-left:5px;">Product List</div>
<div id="products"></div>
<div>
<input id="btnCreateProduct" name="btnCreateProduct" type="button" value="Create Product" />
</div>
<div id="editProductBlock" style="padding:10px;width:20%;border:1px solid green;display:none;">
<div id="typeBlock" style="font-weight:bold;">Edit Product</div>
<table>
<tr><td>Product ID:</td><td><input id="txtProductID" name="txtProductID" type="text" disabled /></td></tr>
<tr><td> Product Name:</td><td><input id="txtProductName" name="txtProductName" type="text" /></td></tr>
<tr><td>Count:</td><td><input id="txtCount" name="txtCount" type="text" /></td></tr>
<tr><td> Price:</td><td><input id="txtPrice" name="txtPrice" type="text" /></td></tr>
<tr><td> Description:</td><td><input id="txtDescription" name="txtDescription" type="text" /></td></tr>
</table>
<div style="padding-top:5px;">
<div id="message" style="color:green;"></div>
<input id="btnSave" name="btnSave" type="button" value="Save" />
<input id="btnCreate" name="btnCreate" type="button" value="Create"/>
</div>
</div>
</div>
</div> <script>
// Click get product list
$('#btnGetProductList').click(function () {
LoadProductList();
}); // Load product list
function LoadProductList() {
$.ajax({
url: '/api/products',
contentType: 'application/html; charset=utf-8',
type: 'GET',
dataType: 'json'
}).success(function (result) {
$('#productsBlock').show();
DisplayProductList(result);
}).error(function (data) {
alert(data);
});
}
// Display product list
function DisplayProductList(result) {
var productTable = $("<table cellpadding='5' cellspacing='5'></table>");
var productTableTitle = $("<tr style='background-color:#7FBA00;'><th>Product ID</th><th>Product Name</th><th>Price</th><th>Count</th><th>Description</th><th></th></tr>");
productTableTitle.appendTo(productTable); for (var i = ; i < result.length; i++) {
var productTableContent = $("<tr style='background-color: #7FBA00; color: white;'><td>"
+ result[i].ProductID + "</td><td>"
+ result[i].ProductName + "</td><td>"
+ result[i].Price + "</td><td>"
+ result[i].Count + "</td><td>"
+ result[i].Description + "</td>"
+ "<td><a href='#' onclick='ViewProduct(" + result[i].ProductID + ")'>View</a></td></tr>"); productTableContent.appendTo(productTable);
} $('#products').html(productTable);
} // View product
function ViewProduct(productId) {
$('#editProductBlock').show();
$('#btnCreate').hide(); $.ajax({
url: '/api/products/' + productId,
contentType: 'application/html;charset=utf-8',
type: 'GET'
}).success(function (result) {
if (result != null) {
$("#txtProductID").val(result.ProductID);
$("#txtProductName").val(result.ProductName);
$("#txtCount").val(result.Count);
$("#txtPrice").val(result.Price);
$("#txtDescription").val(result.Description);
}
}).error(function (data) {
alert(data);
});
} $('#btnCreateProduct').click(function () {
$('#editProductBlock').show();
$('#btnCreate').show();
$('#btnSave').hide();
$('#typeBlock').html("Create Product");
}); // Create product
$('#btnCreate').click(function () {
var product = {
ProductID: ,
ProductName: $('#txtProductName').val(),
Price: $('#txtPrice').val(),
Count: $('#txtCount').val(),
Description: $('#txtDescription').val()
};
$.ajax({
url: '/api/products/',
type: 'POST',
data: JSON.stringify(product),
contentType: 'application/json'
}).success(function (result) {
LoadProductList();
$('#message').html("Product create success.");
}).error(function (data) {
alert(data);
});
});
</script>
</body>
</html>

运行程序
点击获取列表

点击Create Product按钮,输入新增的Product数据。

点击Create按钮,结果如下图。

4.修改Product信息

我们这里要实现的是点击列表数据中的View链接,在文本框中修改选择的Product信息,然后点击Save按钮,数据修改成功。

首先我们先完成Web API中修改Product数据的方法。

        // PUT api/products
public void UpdateProduct(int id,[FromBody]Product product)
{
var currentProduct = productMockList.Where(p => p.ProductID == id).FirstOrDefault();
if (currentProduct != null)
{
foreach(var item in productMockList)
{
if(item.ProductID.Equals(currentProduct.ProductID))
{
item.ProductName = product.ProductName;
item.Price = product.Price;
item.Count = product.Count;
item.Description = product.Description;
}
}
}
}

接着我们在Index View中添加修改Product代码如下。

        // Update product
$('#btnSave').click(function () {
var product = {
ProductID: $('#txtProductID').val(),
ProductName: $('#txtProductName').val(),
Price: $('#txtPrice').val(),
Count: $('#txtCount').val(),
Description: $('#txtDescription').val()
};
$.ajax({
url: '/api/products/' + $('#txtProductID').val(),
type: 'POST',
data: JSON.stringify(product),
contentType: 'application/json'
}).success(function (result) {
LoadProductList();
$('#message').html("Product save success.");
}).error(function (data) {
alert(data);
});
});

运行程序

加载Product列表,任意点击一条数据的View链接,这里我们点击第一条数据。

接着我们修改信息Product Name为"Product AAA",Count10Price200000Description为"Description AAA",并点击Save按钮。

5.删除Product

这里我们像View Product一样,在列表数据行中添加一个Delete链接。点击Delete链接,删除对应的Product数据。

首先我们先完成Web API中删除Product数据的方法。

        // DELETE api/products
public void DeleteProduct(int id)
{
var product = productMockList.Where(p => p.ProductID == id).FirstOrDefault();
if (product != null)
{
productMockList.Remove(product);
}
}

接着修改Index View页面,增加删除功能。

       // Display product list
function DisplayProductList(result) {
var productTable = $("<table cellpadding='5' cellspacing='5'></table>");
var productTableTitle = $("<tr style='background-color:#7FBA00;'><th>Product ID</th><th>Product Name</th><th>Price</th><th>Count</th><th>Description</th><th></th></tr>");
productTableTitle.appendTo(productTable); for (var i = ; i < result.length; i++) {
var productTableContent = $("<tr style='background-color: #7FBA00; color: white;'><td>"
+ result[i].ProductID + "</td><td>"
+ result[i].ProductName + "</td><td>"
+ result[i].Price + "</td><td>"
+ result[i].Count + "</td><td>"
+ result[i].Description + "</td>"
+ "<td><a href='#' onclick='ViewProduct(" + result[i].ProductID + ")'>View</a>&nbsp;<a href='#' onclick='DeleteProduct(" + result[i].ProductID + ")'>Delete</a></td></tr>"); productTableContent.appendTo(productTable);
} $('#products').html(productTable);
}
        // Delete product
function DeleteProduct(productID) {
$.ajax({
url: '/api/products/' + productID,
type: 'DELETE',
}).success(function (result) {
LoadProductList();
$('#message').html("Product delete success.");
}).error(function (data) {
alert(data);
})
}

运行程序
加载列表

点击Product A数据的Delete链接。

可以看到Product A的数据成功删除。

好了,本篇就先到此,希望对你有所帮助,谢谢!

ASP.NET Web API 基本操作(CRUD)的更多相关文章

  1. Asp.Net Web API 2(CRUD操作)第二课

    Asp.Net Web API 2(CRUD操作)第二课 Asp.Net Web API 导航   Asp.Net Web API第一课:入门http://www.cnblogs.com/aehyok ...

  2. 【ASP.NET Web API教程】2.3 与实体框架一起使用Web API

    原文:[ASP.NET Web API教程]2.3 与实体框架一起使用Web API 2.3 Using Web API with Entity Framework 2.3 与实体框架一起使用Web ...

  3. ASP.NET Core Web API Cassandra CRUD 操作

    在本文中,我们将创建一个简单的 Web API 来实现对一个 “todo” 列表的 CRUD 操作,使用 Apache Cassandra 来存储数据,在这里不会创建 UI ,Web API 的测试将 ...

  4. 通过Knockout.js + ASP.NET Web API构建一个简单的CRUD应用

    REFERENCE FROM : http://www.cnblogs.com/artech/archive/2012/07/04/Knockout-web-api.html 较之面向最终消费者的网站 ...

  5. 【ASP.NET Web API教程】2.1 创建支持CRUD操作的Web API

    原文 [ASP.NET Web API教程]2.1 创建支持CRUD操作的Web API 2.1 Creating a Web API that Supports CRUD Operations2.1 ...

  6. 基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD)

    一些小的C/S项目(winform.WPF等),因需要访问操作数据库,但又不能把DB连接配置在客户端上,原因有很多,可能是DB连接无法直接访问,或客户端不想安装各种DB访问组件,或DB连接不想暴露在客 ...

  7. [转]Enabling CRUD Operations in ASP.NET Web API 1

    本文转自:https://docs.microsoft.com/en-us/aspnet/web-api/overview/older-versions/creating-a-web-api-that ...

  8. 适用于app.config与web.config的ConfigUtil读写工具类 基于MongoDb官方C#驱动封装MongoDbCsharpHelper类(CRUD类) 基于ASP.NET WEB API实现分布式数据访问中间层(提供对数据库的CRUD) C# 实现AOP 的几种常见方式

    适用于app.config与web.config的ConfigUtil读写工具类   之前文章:<两种读写配置文件的方案(app.config与web.config通用)>,现在重新整理一 ...

  9. 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用

    由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...

随机推荐

  1. 数字(数学)操作类 Math Random 类 ,大数字操作类

    Math 提供了大量的数学操作方法 Math类中所有的方法都是static 方法

  2. .net学习路线

    http://www.cnblogs.com/huangmeimujin/archive/2011/08/08/2131242.html http://jingyan.baidu.com/articl ...

  3. Java读取其他jar包里的配置文件

    最近要做个东西,需要自己控制数据库的事物,项目封装的框架,实在是提不起去阅读的兴趣, 就想直接去读框架的底层实现里面的数据连接的配置文件(如:Url,port,username,password等), ...

  4. PHP文件上传主要代码讲解

    导读:在php开发过程中,文件上传也经常用到,这里简单介绍下. 在php开发过程中,文件上传也经常用到,这里简单介绍下. 代码如下: <?php    if($_FILES['myfile'][ ...

  5. PHPcms 把盛大登陆换成人人网登陆

    首先要确保你的 phpcms是比较新的版本, v9.3以后的吧 这里说明一个函数 rawurlencode() 本函数将字符串编码成 URL 的字符串专用格式,特殊的字符会转换成百分比符号后面加上二个 ...

  6. Unity基础学习-Unity概述

    Unity 概述 Unity是一个强大的引擎,里面包括大量的工具用来满足各种各样的需求.Unity的编辑器是直观的可定制的,让您在您的工作流中有较大的自由度. 本小节是开始学习Unity的关键部分.里 ...

  7. 怎样在iis中发布asp.net网站

    以windows server2003.vs2008和sql servber2005为例.将开发完成的asp.net网站发布,将发布包放在windows server2003服务器的文件夹下.将web ...

  8. 字符串的长度超过了为 maxJsonLength 属性设置的值

    当出现类似标题的错误时,可以按照如下方法解决: 1. 检查是否传递的JSON字符串长度过长 2.增加JSON串的长度设置,设置如下: <system.web.extensions>     ...

  9. C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿!

    说起异步,Thread,Task,async/await,IAsyncResult 这些东西肯定是绕不开的,今天就来依次聊聊他们 1.线程(Thread) 多线程的意义在于一个应用程序中,有多个执行部 ...

  10. MyBatis绑定错误--BindingException:Invalid bound statement (not found)

    如果出现: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 一般的原因是Mapper i ...