入门 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. Qt原始资源形象问题后删除

        这些天Qt请项目超市收银系统,作为练一练手,无论如何,亦休闲亦无关,做几乎同样的.旨在取代以前的资源图片, 是什么改变了,码里面的路径都改了.还是编译只是去,总是提示这样一个错误. <s ...

  2. Hadoop2.3.0具体安装过程

    前言:       Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有高容错性的特点,并且设计用来部署在低廉的(low-co ...

  3. BZOJ 1015 JSOI2008 星球大战 starwar 并检查集合

    标题效果:给定一个无向图.联通谋求块的数目,以及k一个点的破坏后每次:联通,块的数目 侧面和摧毁的地步全记录,我们可以做相反的. 需要注意的是该点不能算作破坏联通块 #include<cstdi ...

  4. 《UNIX级别编程环境》注意读出信号(2)

    1.功能sigaction sigaction动与指定信号相关联的处理动作.其函数原型例如以下: #inlcude <signal.h> int sigaction(int signo,c ...

  5. 探寻宝藏(双向DP)

    题目描述 传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫内处处有宝物,最珍贵的宝物就藏在右下角,迷宫的进出口在左上角.当然,迷宫中的通路不是平坦 ...

  6. Cocos2d-x v3.0 正式版 如何创建一个项目,TestCpp执行

    欢迎增加 Cocos2d-x 交流群: 193411763 转载请注明原文出处:http://blog.csdn.net/u012945598/article/details/24456579 首先到 ...

  7. android如何在代码中设置margin

    1.首先看你要设置组件的父容器是什么. 例如,我是FrameLayout其中包括组件.如果调用bottomLayout这是: FrameLayout.LayoutParams lp = new Fra ...

  8. C++ Primer中文本查询演示样例Query的实现

    近期在看C++ Primer复习C++的语法,看到书中15.9章中的文本查询演示样例时,认为设计得非常不错,于是便动手照着实现了一个,改动了非常久最终执行成功了,从中也学习到了非常多的语法.以下把实现 ...

  9. 实战parse_ini_file()及扩展函数解析ini文件完整版

    文章来源:PHP开发学习门户 地址:http://www.phpthinking.com/archives/587 在PHP站点开发的过程中,往往会用到读取ini參数配置文件,比方须要訪问一些复杂的借 ...

  10. UVA - 817 According to Bartjens

    Description  According to Bartjens  The wide dissemination of calculators and computers has itsdisad ...