入门 ASP.NET Web API 2 (C#)

HTTP 不只是为了生成 web 页面。它也是一个强大的建设公开服务和数据 Api的平台。

HTTP 的特性:简单、 灵活和无处不在。你能想到的几乎任何平台都有 HTTP 库,因此,HTTP 服务可以延伸到大范围的客户端应用,包括浏览器、 移动设备和传统的桌面应用程序。

ASP.NET Web API 是用于生成基于.NET framework的web框架--- web Api。

在本教程中,您将使用 ASP.NET Web API 创建的 web API 返回的产品列表。

注意:前端的 web 页使用 jQuery 来显示结果,要有一些jquery功底。

Download the completed project.

要求

此示例使用开发工具: 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 的帮助页

添加Model

模型是一个表示您的应用程序中数据的对象。ASP.NET Web API 可以自动序列化您的Model成 JSON、 XML 或一些其他格式,然后将序列化的数据写入到 HTTP 响应消息的正文中。只要客户端可以读取序列化格式,并且它可以反序列化该对象。大多数客户端可以解析 XML 或 JSON。此外,客户端也可以通过 HTTP 请求消息中设置的接受标头设置表明它想要哪一种格式。

让我们首先创建一个代表一种产品的简单模型。
如果解决方案资源管理器不可见,请单击视图菜单,然后选择解决方案资源管理器。在解决方案资源管理器中,右键单击“模型文件夹”。从上下文菜单中,选择“添加”,然后选择“类(class)”。
 

类命名"Product"。将以下属性添加到"Product"类。

  1. namespace ProductsApp.Models
  2. {
  3. public class Product
  4. {
  5. public int Id { get; set; }
  6. public string Name { get; set; }
  7. public string Category { get; set; }
  8. public decimal Price { get; set; }
  9. }
  10. }

添加控制器(Controller)

在 Web API 中,控制器是处理 HTTP 请求的对象。我们将添加一个控制器,可以返回由 ID 指定的单个产品的列表

注意:如果您使用了 ASP.NET MVC 中,您已经熟悉控制器。Web API 控制器类似于 MVC 控制器(controller),但是继承 ApiController 类,而不是控制器类。

在解决方案资源管理器中,右键单击控制器文件夹。选择Add(添加),然后选择controller(控制器)。

在添加Scaffold dialog 中,选择 Web API Controller - Empty。单击添加。

在添加控制器对话框中,名称"ProductsController"的控制器。单击添加。

随即创建一个名为控制器文件夹中的 ProductsController.cs 文件。

注意:你不需要放入一个命名为Controllers的文件夹,你可以选择方便的方式来存放你源文件的文件夹名称。

如果没有打开此文件,则请双击该文件以打开它。此文件中的代码替换为以下内容:

  1. using ProductsApp.Models;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Net;
  6. using System.Web.Http;
  7. namespace ProductsApp.Controllers
  8. {
  9. public class ProductsController : ApiController
  10. {
  11. Product[] products = new Product[]
  12. {
  13. new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 },
  14. new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M },
  15. new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M }
  16. };
  17. public IEnumerable<Product> GetAllProducts()
  18. {
  19. return products;
  20. }
  21. public IHttpActionResult GetProduct(int id)
  22. {
  23. var product = products.FirstOrDefault((p) => p.Id == id);
  24. if (product == null)
  25. {
  26. return NotFound();
  27. }
  28. return Ok(product);
  29. }
  30. }

为保持示例简单,产品都存储在一个固定的数组,在控制器类的内部。当然,在实际的应用中,将从数据库中查询或使用一些其他外部数据源。控制器定义返回的产品的两种方法:GetAllProducts 方法返回的产品的整个列表 IEnumerable <Product>作为类型。GetProductById 方法查找单个产品由其 id。就这么简单 !你有工作 web API。每个控制器上的方法对应于一个或多个 Uri:

为保持示例简单,产品都存储在在控制器类的内部的一个固定的数组,。当然,在实际的应用中,是从数据库中查询或使用一些其他外部数据源。

控制器定义返回产品的两种方法:

  • GetAllProducts 方法返回的产品是以IEnumerable <Product>作为返回类型的整个列表  。
  • GetProductById 方法查找单个产品由其 id。

就这么简单 !你有了一个可以使用的 web API了。每个控制器上的方法对应于一个或多个 Uri:

Controller Method URI
GetAllProducts /api/products
GetProductById /api/products/id

对于 GetProductByID 的方法,在 URI 中的 id 是一个占位符。例如,若要获得具有 ID 为 5 的产品,URI 是 api/products/5。有关 Web API 如何将 HTTP 请求路由到控制器方法的详细信息,将在后续文章中列出,敬请期待。

采用 Javascript 和 jQuery调用Web API

在本节中,我们将添加一个 HTML 页,使用 AJAX 调用 web API。我们会使用 jQuery,采用AJAX 调用,并更新该页面的结果。

在解决方案资源管理器中,右键单击该项目并选择Add,然后选择New Item。

在添加新项对话框中,选择Visual C# 中 Web 节点下,然后选择 HTML 页面项目。命名"index.html"页。

用以下内容替换此文件中的所有内容:

  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title>Product App</title>
  5. </head>
  6. <body>
  7. <div>
  8. <h2>All Products</h2>
  9. <ul id="products" />
  10. </div>
  11. <div>
  12. <h2>Search by ID</h2>
  13. <input type="text" id="prodId" size="5" />
  14. <input type="button" value="Search" onclick="find();" />
  15. <p id="product" />
  16. </div>
  17. <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
  18. <script>
  19. var uri = 'api/products';
  20. $(document).ready(function () {
  21. // Send an AJAX request
  22. $.getJSON(uri)
  23. .done(function (data) {
  24. // On success, 'data' contains a list of products.
  25. $.each(data, function (key, item) {
  26. // Add a list item for the product.
  27. $('<li>', { text: formatItem(item) }).appendTo($('#products'));
  28. });
  29. });
  30. });
  31. function formatItem(item) {
  32. return item.Name + ': $' + item.Price;
  33. }
  34. function find() {
  35. var id = $('#prodId').val();
  36. $.getJSON(uri + '/' + id)
  37. .done(function (data) {
  38. $('#product').text(formatItem(data));
  39. })
  40. .fail(function (jqXHR, textStatus, err) {
  41. $('#product').text('Error: ' + err);
  42. });
  43. }
  44. </script>
  45. </body>
  46. </html>

有几种方法来获取 jQuery。在此示例中,使用 Microsoft Ajax CDN。您还可以下载它从 http://jquery.com/ 和 ASP.NET"Web API"项目模板包括 jQuery 以及。

获取产品的列表若要获取产品的列表,请将 HTTP GET 请求发送到"/ api/products"。

JQuery getJSON 函数会发送一个 AJAX 请求。对于响应包含的 JSON 对象的数组。如果指定的函数请求成功,则调用回调。在回调中,我们用的产品信息更新 DOM。

  1. $(document).ready(function () {
  2. // Send an AJAX request
  3. $.getJSON(apiUrl)
  4. .done(function (data) {
  5. // On success, 'data' contains a list of products.
  6. $.each(data, function (key, item) {
  7. // Add a list item for the product.
  8. $('<li>', { text: formatItem(item) }).appendTo($('#products'));
  9. });
  10. });
  11. });

获得产品的 ID

若要获取产品的 ID,发送 HTTP GET 请求到"/ products/id 的 api",id 就是产品 id。

  1. function find() {
  2. var id = $('#prodId').val();
  3. $.getJSON(apiUrl + '/' + id)
  4. .done(function (data) {
  5. $('#product').text(formatItem(data));
  6. })
  7. .fail(function (jqXHR, textStatus, err) {
  8. $('#product').text('Error: ' + err);
  9. });
  10. }

我们仍然使用 getJSON 发送 AJAX 请求,但这次我们把 ID 放在请求的 URI。请求之后返回的是一个用JSON 表示的单一产品 。

运行应用程序

按 F5 启动调试应用程序。在 web 页应如下所示:

若要获取产品的 ID,输入了 ID 并单击搜索:

使用 f12 键以查看 HTTP 请求和响应

当您正在使用 HTTP 服务时,它可以看到 HTTP 请求和请求消息非常有用。
你可以通过Internet Explorer 9 中使用 F12 开发人员工具。
从Internet Explorer9,按 f12 键以打开工具。单击网络选项卡,然后按开始捕获。现在回到 web 页,请按 F5 重新加载该 web 页。Internet Explorer中将捕获浏览器和 web 服务器之间的 HTTP 通信。摘要视图显示页的所有网络通信:

找到对应的条目相对 uri"api/products /"。选择此项,然后单击转到详细信息视图。在详细信息视图中,有选项卡以查看请求和响应的邮件标题和正文。

例如,如果您单击Request headers 选项卡,您可以看到客户端请求"application//json"接受标头中。

如果您单击Response 选项卡,您可以看到如何产品列表中被序列化为 JSON。其他浏览器都有类似的功能。 Fiddler,web 调试代理是另一个有用的工具。你可以使用Fiddler以查看您的 HTTP 流量,并完全控制你在请求中的 HTTP headers  。

入门 ASP.NET Web API 2 (C#)的更多相关文章

  1. 水果项目第3集-asp.net web api开发入门

    app后台开发,可以用asp.net webservice技术. 也有一种重量级一点的叫WCF,也可以用来做app后台开发. 现在可以用asp.net web api来开发app后台. Asp.net ...

  2. ASP.NET Web API 入门大杂烩

    [前言] 本文是大杂烩,意思即是:到处Copy再加一点点思考而混在一起的文章,引用来源因为太多太杂故而省略,望原作者原谅. [概述] ASP.NET Web API随ASP.NET MVC 4一起发行 ...

  3. 【ASP.NET Web API教程】1 ASP.NET Web API入门

    原文 [ASP.NET Web API教程]1 ASP.NET Web API入门 Getting Started with ASP.NET Web API第1章 ASP.NET Web API入门 ...

  4. Asp.Net Web API 2(入门)第一课

    Asp.Net Web API 2(入门)第一课   前言 Http不仅仅服务于Web Pages.它也是一个创建展示服务和数据的API的强大平台.Http是简单的.灵活的.无处不在的.你能想象到几乎 ...

  5. ASP.NET Web API 2 入门

    本文参考:http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web ...

  6. 01Getting Started---Getting Started with ASP.NET Web API 2入门WebApi2

    HTTP 不只是为了生成 web 页面.它也是建立公开服务和数据的 Api 的强大平台.HTTP 是简单的. 灵活的和无处不在.你能想到的几乎任何平台有 HTTP 库,因此,HTTP 服务可以达到范围 ...

  7. ASP.NET Web API 入门示例详解

    REST服务已经成为最新的服务端开发趋势,ASP.NET Web API即为.NET平台的一种轻量级REST架构. ASP.NET Web API直接借鉴了ASP.NET MVC的设计,两者具有非常类 ...

  8. OData services入门----使用ASP.NET Web API描述

    http://www.cnblogs.com/muyoushui/archive/2013/01/27/2878844.html ODate 是一种应用层协议,设计它的目的在于提供一组通过HTTP的交 ...

  9. [翻译]ASP.NET Web API 2入门

    原文:Getting Started with ASP.NET Web API 2 Step 1:新建一个Empty的Web API Project. Step 2:添加一个Model: public ...

随机推荐

  1. Javascipt数组去重的几种方式

    方法一 function unique(arr) { var retArr = []; for (var i = 0; i < arr.length; i++) { (retArr.indexO ...

  2. 解决Gradle minifyEnabled无法找到错误

    Android studio最新版0.9支持proguard minify,shrinkResources ,尝试了下,提示找不到minifyEnabled方法 Error:(29, 0) Gradl ...

  3. PHP使用MySQL数据库

    原文:PHP使用MySQL数据库 PHP使用MySQL数据库,从建立连接到结果的显示. 完整代码如下: <?php //连接MySQL $db = mysql_connect("loc ...

  4. Maven学习笔记(四):协调和依赖

    Maven协调具体的解释:      Maven定义了这样一组规则:世界上不论什么一个构件都能够使用Maven坐标唯一标识.Maven坐标的元素包含groupId.artifactId.version ...

  5. Putty是一个专业的SSH连接客户端

    http://www.putty.ws/PuTTY-LinuxVPS Putty是一个专业的SSH连接客户端,当然可以用来连接Linux操作系统的VPS.下文是Putty连接工具的使用方法与详细教程, ...

  6. 10个devexpress ASPxPivotGrid常见问题

    原文:10个devexpress ASPxPivotGrid常见问题 1.DXperience ASPxGridView如何开启lightweight模式 描述:ASPxGridView样式主题中pa ...

  7. SSIS从理论到实战,再到应用(6)----SSIS的自带日志功能

    原文:SSIS从理论到实战,再到应用(6)----SSIS的自带日志功能 上期回顾: SSIS从理论到实战,再到应用(5)----流程控制之Foreach循环 博主最近新负责了一个ssis大项目的架构 ...

  8. 数据结构《21》----2014 WAP 第一个问题----Immutable queue

    2014 WAP第一个问题----实现一个不可改变的队列: 看似非常easy.. 其实,不同的版本号之间的效率差距可能是巨大的.. 甚至难以想象. . 使用前STL图书馆queue我们进行了比较.大差 ...

  9. css+html菜单适应性学习的宽度

    本文就是利用css和html自适应于文本菜单的长度. 后效果图实现,例如下列: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvajkwMzgyOTE4Mg= ...

  10. JAVA转让JS功能

    今天,在发展中使用js和Java互动.通常我们使用更多的是js转让Java方法.可以使用dwr.Ajax.jquery.突然发现Java转让js然后,我真的没见过,今天,互联网提供以下信息,顺便总结: ...