入门 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. MIFARE系列7《安全》

    飞利浦的MIFARE卡因为它的高安全性在市场上得到广泛应用,比方我们乘车用的公交卡,学校和企业食堂的饭卡等等.它每一个扇区有独立的密匙(6个字节的password),在通信过程中首先要验证密匙才干读写 ...

  2. [ACM] hdu 1285 确定比赛 (拓扑排序)

    确定比赛 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  3. 不能交换到解决jenkins用户的问题

    su - jenkins始终有效,今centos无效,因为 /etc/password在文档/bin/bash是yum当安装到/bin/false. 之后可以改变. ubuntu安装包和yum安装包的 ...

  4. React.js终探(五)

    在React中,一切都是看做组件. 而组件的嵌套也是十分常见的. 所以有的组件就作为容器组件 容器组件 React元素可以包含子元素 如 //JSX <ezpanel title="t ...

  5. ArcPad 10 的安装和部署

    ArcPad它被安装在一个手持装置或业内外的移动终端ArcGIS产品,那ArcPad这是Esri软件产品,哦,不是硬件. 虽然优于ArcGIS Desktop功能复杂的乐趣,是对于野外作业.数据採集等 ...

  6. 取一种类型里面的产品销售前3甲的数据Sql

    需求:取出每种分类里面的销售前3甲的产品信息 表设计如下图: 数据如下: 两种方法可以实现: 1. SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION ...

  7. java_tomcat_the_APR based Apache Tomcat 小喵咪死活启动报错_临时方案

    报错信息如下: 信息: The APR based Apache Tomcat Native library which allows optimal performance in productio ...

  8. 使用DPM(Deformable Part Model,voc-release3.1)算法INRIA通过训练你的身体检测模型数据集

    我的环境 DPM源代码版本号:voc-release3.1 VOC开发包版本号:VOC2007_devkit_08-Jun Matlab版本号:MatlabR2012b c++编译器:VS2010 系 ...

  9. tiny210——uboot移植Makefile文章分析

    这东西已经写,我们没有时间发布,如今,终于有时间稍微长送记录汇总uboot学习过程.具体了.以后忘了也能够再温习回来嘛有些特殊字符显示得乱掉了 Makefile追踪技巧: 技巧1:能够先从编译目标開始 ...

  10. Linux中加入用户、删除用户时新手可能遇到的问题

    Linux中加入用户.删除用户时新手可能遇到的问题  1.创建新用户后切换到新用户:No directory, logging in with HOME=/     加入用户     #sudo us ...