官方的地址:
http://www.asp.net/web-api
里面的资料很全,是学习的第一选择.建议多参考此资料
1.里面最简单直接的例子
http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api
HTTP 不只是为了生成 web 页面。它也是一个强大的平台建设公开服务和数据的 Api。HTTP 是简单、 灵活和无处不在。您能想到的几乎任何平台有一个 HTTP 库,因此,HTTP 服务可以到达范围广泛的客户端,包括浏览器、移动设备和传统的桌面应用程序。
ASP.NET Web API 是用于生成 web Api 在.NET 框架上的框架。在本教程中,您将使用 ASP.NET Web API 创建的 web API 返回的产品列表。前端的 web 页使用 jQuery 来显示结果。
下载已完成的项目.
本教程使用Visual Studio 2013.
启动 Visual Studio 时,从开始页中选择新的项目。或者,从文件菜单中,选择新建,然后项目.
在模板窗格中,选择已安装的模板和展开Visual C#节点。在Visual C#中,选择Web。在项目模板的列表中,选择ASP.NET Web 应用程序。名称"ProductsApp"项目,然后单击确定.
在新的 ASP.NET 项目对话框中,选择的空模板。根据"添加文件夹和核心的参考文件",检查Web API。单击确定.
您还可以创建一个 Web API 项目,利用"Web API"模板。Web API 模板使用 ASP.NET MVC 提供 API 的帮助页。我使用的空模板在本教程中因为我想要显示无 MVC Web API。一般情况下,你不需要知道 ASP.NET MVC 中使用 Web API。
模型是一个对象,表示您的应用程序中的数据。ASP.NET Web API 可以自动序列化您的模型到 JSON、 XML 或一些其他格式,然后将序列化的数据写入到 HTTP 响应消息的正文。只要客户端可以读取序列化格式,它可以反序列化该对象。大多数客户端可以解析 XML 或 JSON。此外,客户端可以表明哪一种格式它想要通过 HTTP 请求消息中设置的接受标头。
让我们首先创建一个简单的模型,它代表一种产品。
如果解决方案资源管理器已不可见,请单击视图菜单,然后选择解决方案资源管理器。在解决方案资源管理器中,右键单击模型文件夹。从上下文菜单中,选择添加,然后选择类.
命名类"Product"。将以下属性添加到 Product
类。
namespace ProductsApp.Models { public class Product { public int Id { get; set; } public string Name { get; set; } public string Category { get; set; } public decimal Price { get; set; } } }
在 Web API 中,控制器是处理 HTTP 请求的对象。我们将添加一个控制器,可以返回由 ID 指定的单个产品的列表
请注意如果你使用了 ASP.NET MVC 中,您已熟悉控制器。Web API 控制器类似于 MVC 控制器,但是继承ApiController类,而不是控制器类。
在解决方案资源管理器中,右键单击控制器文件夹。选择添加,然后选择控制器.
在添加脚手架对话框中,选择Web API 控制器-空。单击添加.
在添加控制器对话框中,名称"ProductsController"的控制器。单击添加.
脚手架创建一个名为控制器文件夹中的 ProductsController.cs 文件。
你不需要放入一个文件夹命名为控制器的您的控制器。只是方便的方式来组织您的源文件的文件夹名称。
如果该文件尚未打开,请双击该文件以将其打开。此文件中的代码替换为以下内容:
using ProductsApp.Models; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Web.Http; namespace ProductsApp.Controllers { public class ProductsController : ApiController { Product[] products = new Product[] { new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 }, new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M }, new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M } }; public IEnumerable<Product> GetAllProducts() { return products; } public IHttpActionResult GetProduct(int id) { var product = products.FirstOrDefault((p) => p.Id == id); if (product == null) { return NotFound(); } return Ok(product); } } }
为保持示例简单,产品都存储在一个固定的数组,在控制器类的内部。当然,在实际的应用中,将从数据库中查询或使用一些其他外部数据源。
控制器定义返回的产品的两种方法:
GetAllProducts
方法返回产品的完整列表作为 IEnumerableGetProduct
方法查找单个产品由其 id。就这么简单 !你有工作 web API。每个控制器上的方法对应于一个或多个 Uri:
控制器的方法 | URI |
---|---|
GetAllProducts | /api/products |
GetProduct | /api/products/id |
对于GetProduct
的方法,URI 中的id是一个占位符。例如,若要获得具有 ID 为 5 的产品,URI 是api/products/5
.
有关 Web API 如何将 HTTP 请求路由到控制器方法的详细信息,请参见在 ASP.NET Web API 中的路由.
在本节中,我们将添加一个 HTML 页,使用 AJAX 调用 web API。我们会使用 jQuery,以使 AJAX 调用,并更新该页面的结果。
在解决方案资源管理器中,右键单击该项目并选择添加,然后选择新项目.
在添加新项对话框中,选择下Visual C#中, Web节点,然后选择HTML 页面项目。命名"index.html"页。
用以下内容替换此文件中的所有内容:
xmlns="http://www.w3.org/1999/xhtml">Product App All Productsid="products" />
Search by ID type="text" id="prodId" size="5" /> type="button" value="Search" onclick="find();" />var uri = 'api/products'; $(document).ready(function () { // Send an AJAX request $.getJSON(uri) .done(function (data) { // On success, 'data' contains a list of products. $.each(data, function (key, item) { // Add a list item for the product. $('id="product" />
' , { text: formatItem(item) }).appendTo($('#products')); }); }); }); function formatItem(item) { return item.Name + ': $' + item.Price; } function find() { var id = $('#prodId').val(); $.getJSON(uri + '/' + id) .done(function (data) { $('#product').text(formatItem(data)); }) .fail(function (jqXHR, textStatus, err) { $('#product').text('Error: ' + err); }); }
有几种方法来获取 jQuery。在此示例中,使用Microsoft Ajax CDN。您还可以下载它从http://jquery.com/和 ASP.NET"Web API"项目模板包括 jQuery 以及。
若要获取产品的列表,请向“api/products”发送一个 HTTP GET 请求。
JQuery getJSON函数会发送一个 AJAX 请求。对于响应包含的 JSON 对象的数组。done
函数指定如果请求成功,则调用的回调。在回调中,我们用的产品信息更新 DOM。
$(document).ready(function () { // Send an AJAX request $.getJSON(apiUrl) .done(function (data) { // On success, 'data' contains a list of products. $.each(data, function (key, item) { // Add a list item for the product. $('' , { text: formatItem(item) }).appendTo($('#products')); }); }); });
若要获取产品的 ID,发送 HTTP GET 请求到"/ api/产品id",其中id是产品 id。
function find() { var id = $('#prodId').val(); $.getJSON(apiUrl + '/' + id) .done(function (data) { $('#product').text(formatItem(data)); }) .fail(function (jqXHR, textStatus, err) { $('#product').text('Error: ' + err); }); }
我们仍然调用 getJSON
发送 AJAX 请求,但这次我们将 ID 放在请求 URI 中。来自此请求的响应是一个单一产品的 JSON 表示。
按 F5 启动调试应用程序。在 web 页应如下所示:
若要获取产品的 ID,输入了 ID 并单击搜索:
如果您输入无效的 ID,则服务器返回 HTTP 错误:
当您正在使用 HTTP 服务时,它可以看到 HTTP 请求和请求消息非常有用。你可以通过互联网资源管理器中 9 中使用 F12 开发人员工具。从互联网资源管理器 9,按f12 键以打开工具。单击网络选项卡,然后按开始捕获。现在回到 web 页,请按F5重新加载该 web 页。互联网资源管理器中将捕获浏览器和 web 服务器之间的 HTTP 通信。摘要视图显示页的所有网络通信:
找到对应的条目相对 uri"api/产品 /"。选择此项,然后单击转到详细信息视图。在详细信息视图中,有选项卡以查看请求和响应的邮件标题和正文。例如,如果您单击请求标头选项卡,您可以在接受标头中看到客户端请求的“application/json”。
如果您单击响应正文选项卡,您可以看到如何产品列表中被序列化为 JSON。其他浏览器都有类似的功能。提琴手,web 调试代理是另一个有用的工具。你可以使用的提琴手以查看您的 HTTP 流量,并撰写 HTTP 请求,请求,为您提供在请求中的 HTTP 标头的完全控制。