【翻譯】ASP.NET Web API入門


簡介

ASP.NET Web API是一個可以簡化創建HTTP服務的框架

它支持包括瀏覽器和移動設備在內的各種客戶端

ASP.NET Web API是在.NET Framework上創建RESTful應用程序的理想平台

譯者注:關於RESTful web服務可以參見這里:http://zh.wikipedia.org/wiki/REST

准備

ASP.NET MVC 4包括ASP.NET Web API,請在這里安裝:http://www.asp.net/web-api

使用Visual Studio 2010或者Visual Studio 2012都可以開發

關於ASP.NET Web API的特性請看這里:http://www.asp.net/whitepapers/mvc4-release-notes#_Toc317096197

簡介

HTTP並不是單單為web pages服務的

它還是一個創建網絡API的強大平台

這些API提供網絡服務並可以交互數據。

HTTP協議簡單、靈活最重要的是它無處不在

差不多你能想到的所有的平台都支持HTTP協議

所以通過HTTP協議可以兼容大部分客戶端

包括瀏覽器、移動客戶端和桌面應用

ASP.NET Web API是一個在.NET Framework上創建web API的類庫

在這篇文章中,

你將看到如何使用ASP.NET Web API創建一個web api,

並且讓這個api返回一個產品列表的數據

新建項目

如下圖所示:

image

image

創建模型

模型是一個用來展現數據的對象

ASP.NET WEB API可以自動序列化模型對象

為JSON、XML、或者其他的數據格式

然后把序列化后的數據寫入HTTP的Response消息內

客戶端可以讀取這些序列化后的數據

並把這些數據反序列化成一個對象

大多數客戶端可以解析XML,JSON數據

並且可以根據消息的header來決定使用什么格式化數據的方式

image

創建一個名為Product的模型類

代碼如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace HelloWebAPI.Models
{
    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Category { get; set; }
        public decimal Price { get; set; } 
    }
}
 

創建控制器

如果你使用過ASP.NET MVC

你會發現ASP.NET WEB API的控制器

與ASP.NET MVC的控制器基本相同

最大的不同就是

ASP.NET WEB API的控制器繼承自ApiController

ASP.NET MVC的控制器繼承自Controller

WEB API的控制器並不返回View,而是直接返回數據。

image

image

並不一定要把所創建的控制器類文件放在Controller文件夾中

創建的文件,修改之后代碼如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using HelloWebAPI.Models;

namespace HelloWebAPI.Controllers
{
    public class ProductsController : ApiController
    {
        Product[] products = new Product[]  
        {  
            new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1.39M },  
            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 Product GetProductById(int id)
        {
            var product = products.FirstOrDefault((p) => p.Id == id);
            if (product == null)
            {
                var resp = new HttpResponseMessage(HttpStatusCode.NotFound);
                throw new HttpResponseException(resp);
            }
            return product;
        }

        public IEnumerable<Product> GetProductsByCategory(string category)
        {
            return products.Where(
                (p) => string.Equals(p.Category, category,
                    StringComparison.OrdinalIgnoreCase));
        }
    }

}
 

GetAllProducts方法返回一個Product類型的數組

GetProductById通過ID查找Product

GetProductsByCategory通過分類查找Product

至此

你可以通過如下URI訪問相應的方法

GetAllProducts:/api/products

GetProductById:/api/products/id

GetProductsByCategory:/api/products/?category=category

訪問WEB API

運行此工程,

訪問如下URL可以得到結果

http://localhost:5380/api/products

image

這里我們看到的是XML的內容

但WEB API非常智能

可以通過客戶端的請求來確定傳輸什么類型的數據

我們可以通過如下代碼來獲取JSON類型的數據

            $(document).ready(function () {
                // Send an AJAX request 
                $.getJSON("api/products/",
                function (data) {
                    // On success, 'data' contains a list of products. 
                    $.each(data, function (key, val) {

                        // Format the text to display. 
                        var str = val.Name + ': $' + val.Price;

                        // Add a list item for the product. 
                        $('<li/>', { html: str })
                        .appendTo($('body'));
                    });
                });
            });
 

獲取到的數據如下圖所示

image

項目源碼下載地址:

http://files.cnblogs.com/liulun/HelloWebAPI.zip


免責聲明!

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



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