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

示例代码下载地址:http://download.csdn.net/detail/gangzhucoll/9844909

HTTP不仅仅是为了提供网页。它也是构建公开服务和数据的API的强大平台。HTTP简单,灵活,无所不在。几乎任何您可以想到的平台都有一个HTTP库,所以HTTP服务可以覆盖广泛的客户端,包括浏览器,移动设备和传统的桌面应用程序。

ASP.NET Web API是在.NET Framework之上构建Web API的框架。在本教程中,您将使用ASP.NET Web API创建返回产品列表的Web API。

本教程中使用的软件版本

创建一个Web API项目

在本教程中,您将使用ASP.NET Web API创建返回产品列表的Web API。前端网页使用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头来指示所需的格式。

我们先来创建一个代表产品的简单模型。

如果解决方案资源管理器尚未显示,请单击查看菜单,然后选择解决方案资源管理器。在解决方案资源管理器中,右键单击Models文件夹。从上下文菜单中,选择添加,然后选择

将类命名为“产品”。将以下属性添加到Product类中。

[csharp] view plain copy
print ?
  1. namespace ProductsApp.Models  
  2. {  
  3.     public class Product  
  4.     {  
  5.         public int Id { getset; }  
  6.         public string Name { getset; }  
  7.         public string Category { getset; }  
  8.         public decimal Price { getset; }  
  9.     }  
  10. }  
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类而不是Controller类。

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

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

在“ 添加控制器 ”对话框中,命名控制器“ProductsController”。单击添加

脚手架在Controllers文件夹中创建一个名为ProductsController.cs的文件。

注意

您不需要将控制器放入名为Controllers的文件夹中。文件夹名称只是组织源文件的一种方便的方法。

如果此文件尚未打开,请双击该文件将其打开。用以下代码替换此文件中的代码:

[csharp] view plain copy
print ?
  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. }  
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方法将整个产品列表作为IEnumerable <Product>类型返回。
  • GetProduct方法通过其ID来查找单个产品。

而已!你有一个工作的Web API。控制器上的每个方法对应于一个或多个URI:

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

对于该GetProduct方法,URI中的id是占位符。例如,要获得ID为5的产品,URI为api/products/5

有关Web API如何将HTTP请求路由到控制器方法的更多信息,请参阅ASP.NET Web API中的路由

使用Javascript和jQuery调用Web API

在本节中,我们将添加一个使用AJAX调用Web API的HTML页面。我们将使用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>  
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Product App</title>
</head>
<body>

  <div>
    <h2>All Products</h2>
    <ul id="products" />
  </div>
  <div>
    <h2>Search by ID</h2>
    <input type="text" id="prodId" size="5" />
    <input type="button" value="Search" οnclick="find();" />
    <p id="product" />
  </div>

  <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
  <script>
    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.
              $('<li>', { 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);
          });
    }
  </script>
</body>
</html>

有几种方法来获取jQuery。在这个例子中,我使用了Microsoft Ajax CDN。您还可以从http://jquery.com/下载它,ASP.NET“Web API”项目模板也包括jQuery。

获取产品列表

要获取产品列表,请发送HTTP GET请求到“/ api / products”。

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. });  
$(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.
                $('<li>', { text: formatItem(item) }).appendTo($('#products'));
            });
        });
});

通过ID获取产品

要通过ID获取产品,请将HTTP GET请求发送到“/ api / products / 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. }  
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开始调试应用程序。网页应如下所示:

2

要通过ID获取产品,请输入ID并单击搜索:

如果您输入的ID无效,则服务器返回HTTP错误:

使用F12查看HTTP请求和响应

当您使用HTTP服务时,查看HTTP请求和请求消息非常有用。您可以使用Internet Explorer 9中的F12开发人员工具来执行此操作。从Internet Explorer 9中,按F12打开工具。单击网络选项卡,然后按开始捕获。现在回到网页,按F5重新加载网页。Internet Explorer将捕获浏览器和Web服务器之间的HTTP流量。摘要视图显示页面的所有网络流量:

找到相对URI“api / products /”的条目。选择此条目,然后单击转到详细视图。在详细视图中,有选项卡来查看请求和响应标题和主体。例如,如果您单击请求标题选项卡,您可以看到客户端在Accept标头中请求“application / json”。

如果您单击响应体选项卡,您可以看到产品列表如何序列化为JSON。其他浏览器具有相似的功能。另一个有用的工具是Fiddler,一个Web调试代理。您可以使用Fiddler查看您的HTTP流量,还可以编写HTTP请求,从而可以完全控制请求中的HTTP头。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ASP.NET Web API 2框架揭秘是一本针对ASP.NET Web API 2框架进行深入介绍的电子书。ASP.NET Web API 2是一个用于构建基于HTTP协议的Web服务的开发框架。这本电子书透过简单直接的方式,帮助读者更好地理解和应用该框架。 在这本电子书中,我们将介绍Web API 2框架的核心概念和基本的工作原理。读者将了解到Web API 2的基本架构和特性,以及如何通过配置和扩展来实现自定义需求。我们还会涉及到常见的Web API设计模式、RESTful架构以及数据传输和安全方面的问题。 通过这本电子书,读者将深入了解Web API 2框架的关键概念,如控制器、动作方法、路由、返回类型和过滤器等。我们会通过实际示例来说明如何创建和调用Web API,并介绍如何处理输入数据、输出结果和错误处理等方面的问题。 此外,这本电子书还将讨论Web API 2框架与其他ASP.NET技术如MVC框架的关系,以及如何在实际项目中使用一些常用的工具和库来提高开发效率和代码质量。 总结而言,ASP.NET Web API 2框架揭秘电子书是一本完整而全面的指南,旨在帮助开发者快速入门和深入理解Web API 2框架,从而能够更好地应用于开发符合现代Web标准的高性能、可扩展和安全的Web服务。无论是初学者还是有经验的开发者,都能从这本电子书中获得实用的知识和技巧。 ### 回答2: ASP.NET Web API 2框架揭秘电子书是一本详细介绍ASP.NET Web API 2框架的电子书。ASP.NET Web API 2 是一个用于构建Web API应用程序的框架,它可以让开发者轻松地构建Web服务,并将其与各种客户端应用程序(如Web、移动设备和桌面应用程序)进行交互。 这本电子书详细介绍了ASP.NET Web API 2框架的工作原理、核心组件、常见用法和最佳实践。它从请求的路由到返回的响应的整个过程进行了解剖,帮助读者理解框架的内部工作机制。 电子书中涵盖了许多重要的概念,如控制器、路由、模型绑定、过滤器等。它解释了如何创建和配置Web API控制器,并讨论了一些高级主题,如版本控制、身份验证和授权。 此外,电子书还介绍了如何使用ASP.NET Web API 2框架来处理不同类型的数据,如JSON、XML和表单数据。它还讨论了如何处理常见的错误和异常,并提供了一些建议和实践,以优化性能和安全性。 总的来说,ASP.NET Web API 2框架揭秘电子书是一本帮助开发者深入了解ASP.NET Web API 2框架的权威指南。它适用于那些有一定ASP.NET开发经验的开发者,并且可以帮助他们更好地利用ASP.NET Web API 2框架来构建高效、可扩展和安全的Web API应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值