HTTP 不只是为了生成 web 页面。它也是建立公开服务和数据的 Api 的强大平台。HTTP 是简单的、 灵活的和无处不在。你能想到的几乎任何平台有 HTTP 库,因此,HTTP 服务可以达到范围广泛的客户,包括浏览器、 移动设备和传统的桌面应用程序。

ASP.NET Web API 是用于生成 web Api 在.NET 框架上的框架。在本教程中,您将使用 ASP.NET Web API 来创建 web API 返回的产品列表。

在本教程中使用的软件版本

创建一个 Web API 项目

在本教程中,您将使用 ASP.NET Web API 来创建 web API 返回的产品列表。前端的 web 页中使用 jQuery 来显示结果。

启动 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 请求消息中设置 Accept 标头。

让我们开始创建一个简单的模型,它表示一种产品。

如果解决方案资源管理器中不可见,请单击视图菜单中,选择解决方案资源管理器。在解决方案资源管理器中,右键单击模型文件夹。从上下文菜单中,选择添加,然后选择.

将类命名为"产品"。将以下属性添加到 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. }

添加控制器

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

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

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

添加脚手架对话框中,选择Web API 控制器-空。单击添加.

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

脚手架创建一个名为控制器文件夹中的 ProductsController.cs 文件。

你不需要把您的控制器放进一个文件夹命名为控制器。文件夹名称是只是方便的方式来组织您的源文件。

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

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

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

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

  • GetAllProducts方法返回整个清单上的产品作为IEnumerable < 产品 >类型。
  • GetProduct方法查找一个单一的产品,由其 id。

就是这个!你有工作 web API。每个控制器上的方法对应于一个或多个 Uri:

控制器的方法 URI
GetAllProducts api/产品
GetProduct id

GetProduct方法,URI 中的id是一个占位符。例如,若要获取 id 为 5 的产品,URI 是api/products/5.

有关 Web API 如何将 HTTP 请求路由到控制器方法的详细信息,请参阅路由选择在 ASP.NET Web API.

调用 Web API 与 Javascript 和 jQuery

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

在解决方案资源管理器中,右键单击该项目并选择添加,然后选择新项目.

添加新项对话框中,选择下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.  
  8. <div>
  9. <h2>All Products</h2>
  10. <ul id="products" />
  11. </div>
  12. <div>
  13. <h2>Search by ID</h2>
  14. <input type="text" id="prodId" size="5" />
  15. <input type="button" value="Search" onclick="find();" />
  16. <p id="product" />
  17. </div>
  18.  
  19. <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
  20. <script>
  21. var uri = 'api/products';
  22.  
  23. $(document).ready(function () {
  24. // Send an AJAX request
  25. $.getJSON(uri)
  26. .done(function (data) {
  27. // On success, 'data' contains a list of products.
  28. $.each(data, function (key, item) {
  29. // Add a list item for the product.
  30. $('<li>', { text: formatItem(item) }).appendTo($('#products'));
  31. });
  32. });
  33. });
  34.  
  35. function formatItem(item) {
  36. return item.Name + ': $' + item.Price;
  37. }
  38.  
  39. function find() {
  40. var id = $('#prodId').val();
  41. $.getJSON(uri + '/' + id)
  42. .done(function (data) {
  43. $('#product').text(formatItem(data));
  44. })
  45. .fail(function (jqXHR, textStatus, err) {
  46. $('#product').text('Error: ' + err);
  47. });
  48. }
  49. </script>
  50. </body>
  51. </html>

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

获取产品列表

若要获取产品的列表,向"/ api/产品"发送一个 HTTP GET 请求。

JQuery getJSON函数发送一个 AJAX 请求。为响应包含的 JSON 对象的数组。done功能指定如果请求成功,则调用的回调。在回调中,我们使用的产品信息更新 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 请求"/id",其中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 并单击搜索:

如果您输入了无效的 ID,服务器将返回一个 HTTP 错误:

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

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

找到对应的条目相对 uri"api 的产品 /"。选择此项,然后单击转到详细的视图。在详细信息视图中,有选项卡以查看请求和响应邮件标题和正文。例如,如果您单击请求标题选项卡,您可以看到客户端请求"应用程序/json"Accept 标头中。

如果您单击响应正文选项卡,您可以看到如何产品列表被序列化为 JSON。其他浏览器都有类似的功能。提琴手,web 调试代理是另一个有用的工具。你可以使用提琴手以查看您的 HTTP 流量,构成 HTTP 请求,在请求给您的 HTTP 标头的完全控制。

在 Azure 上看到此应用程序运行

你想看到作为一个活的 web 应用程序运行完成的网站吗?只需单击下面的按钮,可以将一个完整的版本的应用程序部署到您 Azure 的帐户。

你需要将此解决方案部署到 Azure 蔚蓝帐户。如果您还没有帐户,您有下列选项:

  • 免费开放的 Azure 帐户-你得到学分你可以使用来尝试有偿的 Azure 服务,和甚至他们习惯后您最多可以保持帐户和使用免费的 Azure 服务。
  • 激活 MSDN 订户权益-你的 MSDN 订阅,您可以使用为有偿 Azure 服务每个月给你学分。

接下来的步骤

这篇文章的初衷是在 2014 年 1 月 20 日

 

作者信息

01Getting Started---Getting Started with ASP.NET Web API 2入门WebApi2的更多相关文章

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

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

  2. ASP.NET Web API 2 入门

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

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

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

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

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

  5. ASP.NET Web API 2 入门(一)

    前言 HTTP 不是只是为了服务的 web 页.这也是建设公开服务和数据的 Api 的强大平台.HTTP 是简单的. 灵活的和无处不在.你能想到的几乎任何平台有 HTTP 库,因此,HTTP 服务可以 ...

  6. Global Error Handling in ASP.NET Web API 2(webapi2 中的全局异常处理)

    目前,在Web API中没有简单的方法来记录或处理全局异常(webapi1中).一些未处理的异常可以通过exception filters进行处理,但是有许多情况exception filters无法 ...

  7. ASP.NET Web API 之一 入门篇

    一.基于RESTful标准的Web Api 原文讲解:https://www.cnblogs.com/lori/p/3555737.html 微软的web api是在vs2012上的mvc4项目绑定发 ...

  8. ASP.NET Web API 2入门

    1.全局配置 Web API 2之前是这样的配置的: protected void Application_Start() { //未实现特性路由 WebApiConfig.Register(Glob ...

  9. 杂项:ASP.NET Web API

    ylbtech-杂项:ASP.NET Web API ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务. ASP.NET Web A ...

随机推荐

  1. JPA mysql wildfly jboss 存储时乱码

    首先确保mysql的库,表创建时指定的字符集collation. 可以直接用命令行插入中文,看查询出来是不是中文. insert into live_main_sync (cn_name, creat ...

  2. Linux进程关闭和后台运行解析

    1.问题背景 Java是跨平台的,大部分程序也都是在Linux服务器上运行的.但是很多朋友其实对服务器了解并不多,对相关知识也是一知半解.很多概念可能知道,但是并不十分清楚,仅仅是基本运用.可能很多新 ...

  3. mac系统的一些操作常识

    mac系统如何显示和隐藏文件 苹果Mac OS X操作系统下,隐藏文件是否显示有很多种设置方法,最简单的要算在Mac终端输入命令.显示/隐藏Mac隐藏文件命令如下(注意其中的空格并且区分大小写): 显 ...

  4. WinForm------TreeList加载数据方法

    1.SQLService操作 (1)在SQLServer创建一张表dbo.Department (2)写入以下数据 2.VS操作(这里如何使用EntityFramework加载数据库就不多说了哈) ( ...

  5. base64 convert to file

    var fs= require('fs') var imageFile = dataUrl.replace(/^data:image\/\w+;base64,/, ""); var ...

  6. 10月16日上午MySQL数据库基础操作(创建、删除)

    以前用的是鼠标在界面上手动创建,这样创建会比较麻烦,而且还会经常出问题.在其它电脑上要用的话还需要重复操作.所以要使用程序代码操作,能通过代码的就不用手动操作. 在数据库界面选择要用的数据库,双击打开 ...

  7. 从零开始HTML(一 2016/10/17)

    就是准备跟着霹雳猿教程过一遍HTML啦,边看边记录更便于理解记忆吧~ 1.属性 HTML 标签可以拥有属性.属性提供了有关 HTML 元素的更多的信息.属性总是以名称/值对的形式出现,比如:name= ...

  8. <摘录>如何在64位linux强制编译32位应用程序

    GDC注:因为需要解决在linux64机上编译32位的mongodb(没办法,因为编译的php是32位,然后我想将mongdb扩展添加到php中),在网上搜了很多文章,感觉这篇好懂,而且好用.我使用的 ...

  9. string.capwords() 将每个单词首字母大写

    string.capwords() 将每个单词首字母大写 代码: import string s = ' The quick brown fox jumped over the lazy dog. ' ...

  10. How to get http response.

    public class HttpWebResponseUtility { public static string CreateGetHttpResponse(string url) { var r ...