1、入門--ASP.NET Web API 2 (C#)


楊孟易翻譯於2015年1月15日星期四

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來顯示結果。

10

啟動Visual Studio,並從起始頁中選擇新建項目,或者從文件菜單,選擇新建,然后選擇項目

模板窗口中,選擇已安裝的模板,並展開Visual C#節點。在Visual C#中,選擇Web。在項目模板列表中,選擇ASP.NET Web應用程序。將項目命名為“ProductsApp”,然后單擊確定

10

新建ASP.NET項目對話框中,選擇Empty。在“為以下對象添加文件夾和核心引用”,勾選Web API。點擊確定

你也可以使用“Web API”模板創建Web API項目。在Web API模板中使用ASP.NET MVC提供API幫助頁面。因為我想證明沒有MVC的Web API,所以本教程使用的是空模板。一般情況下,你不需要知道ASP.NET MVC后才使用Web API。

添加Model(模型)

model(模型)是一個對象,它代表了應用程序中的數據。 ASP.NET Web API可以自動將model(模型)序列化為JSON、XML或者其他格式,然后將序列化的數據寫入到HTTP響應消息的正文。只要客戶端可以讀取序列化格式,它就可以反序列化對象。大多數客戶端可以解析XML或者JSON。此外,客戶端可以通過設置HTTP請求消息的Accept報頭來獲取想要的消息格式。

讓我們先創建一個代表產品的簡單model(模型)。

如果解決方案資源管理器看不見,單擊視圖菜單,然后選擇解決方案資源管理器。在解決方案資源管理器中,右鍵單擊Models文件夾。從上下文菜單中,選擇添加,然后選擇。  

命名類為“Product”。將以下屬性添加到產品類。

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; }
    }
}

 

添加Controller(控制器)

在Web API中, 一個controller(控制器) 是一個處理HTTP請求的對象。 我們將添加一個controller控制器,可以返回的產品列表或通過ID指定一個產品。

注意:如果你已經使用ASP.NET MVC,已經熟悉了控制器。Web API控制器類似於MVC控制器,但繼承ApiController類,而不是Controller類。

解決方案資源管理器中,右鍵單擊Controllers(控制器)文件夾。選擇添加,然后選擇控制器

添加基架對話框中,選擇Web API控制器 - 空。單擊添加

添加控制器對話框,命名controller(控制器)為“ProductsController”,點擊添加

在Controllers文件夾下面,基架創建了一個名為ProductsController.cs的文件。

你不需要把contollers(所有控制器)都放到一個文件夾命名為Controllers。該文件夾的名字僅僅是方便你組織源文件的一種方式。

如果此文件尚未打開,雙擊打開該文件。替換在此文件中使用以下的代碼:

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 = "番茄蛋湯", Category = "湯類", Price = 10 },
            new Product { Id = 2, Name = "土豆絲", Category = "中餐", Price = 3.75M },
            new Product { Id = 3, Name = "漢堡包", Category = "快餐", 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/products
GetProduct /api/products/id

 

針對GetProduct方法,在URI中的id是一個占位符。例如,為了得到編號為5的產品,該URI就為api/products/5。

有關如何使Web API將HTTP請求路由到控制器方法的詳細信息,請參閱Routing in ASP.NET Web API(未翻譯,導航到官網).

通過JavaScript和jQuery調用Web API

在本節中,我們將添加使用AJAX調用Web API的HTML頁面。我們將使用jQuery做AJAX調用,也會根據返回結果更新頁面。

在解決方案資源管理器中,右鍵單擊該項目並選擇添加,然后選擇新建項

添加新項對話框中,在Visual C#下面選擇Web節點,然后選擇HTML頁的項目。命名頁“index.html”。

以下內容替換這個文件中的所有內容:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>Product App</title>
</head>
<body>

  <div>
    <h2>所有產品</h2>
    <ul id="products" />
  </div>
  <div>
    <h2>通過ID搜索</h2>
    <input type="text" id="prodId" size="5" />
    <input type="button" value="Search" onclick="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 () {
      // 發送AJAX請求
      $.getJSON(uri)
          .done(function (data) {
            // 如果成功,‘data’包含產品列表。
            $.each(data, function (key, item) {
              // 將列表添加到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('錯誤: ' + err);
          });
    }
  </script>
</body>
</html>

有幾種方法得到的jQuery。在這個例子中,我使用了百度的Ajax CDN。您也可以從http://jquery.com/下載,並且ASP.NET的“Web API”項目模板已經包括了jQuery。

獲得產品列表

為了獲得產品列表,發送HTTP GET請求到“/api/products”。
jQuery的getJSON方法發送了AJAX請求。響應包含JSON對象的數組。如果請求成功,將回調done方法,更新產品信息的DOM節點。

$(document).ready(function () {
    // 發送AJAX請求 
    $.getJSON(apiUrl)
        .done(function (data) {
            // 如果成功,‘data’包含產品列表。
            $.each(data, function (key, item) {
                // 將列表添加到product節點。
                $('<li>', { text: formatItem(item) }).appendTo($('#products'));
            });
        });
});

通過ID獲得一個產品

為了通過ID獲得產品,發送一個HTTP的GET請求到“/api/products/id”,其中id就是產品ID。

function find() {
    var id = $('#prodId').val();
    $.getJSON(apiUrl + '/' + id)
        .done(function (data) {
            $('#product').text(formatItem(data));
        })
        .fail(function (jqXHR, textStatus, err) {
            $('#product').text('錯誤: ' + err);
        });
}

我們仍然調用的getJSON發送Ajax請求,但這次我們把ID加在請求的URI上。從這個請求的響應是一個單一產品的JSON格式。 

運行應用程序

按F5開始調試應用程序。該網頁應該像下面這樣:

要通過ID獲得產品,輸入ID,然后點擊搜索:

如果輸入一個無效的ID,服務器返回一個HTTP錯誤:

 

下一章,將介紹Web API 2 的Action Results,或者參考原文Action Results in Web API 2


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM