2013年12月10日 星期二

ASP.NET Web API2 入門

測試環境: VS2013 、Windows7

本文內容:
建立一個 Web API 專案
新增一個Model
新增一個 Controller
使用Javascript/jQuery 呼叫Web API
執行程式
使用F12觀查Http Request(請求) 及 Response(回應)



建立一個 Web API 專案
開啟VS2013,新增專案,由範本中選擇”Visual C#”=>”Web”=>ASP>NET Web應用程式
按下"確定"
選擇 “Empty”範本並勾選”Web API” 選項
按下"確定"



新增一個Model
在應用程中 model 是表示data(資料)的物件。ASP.NET Web API 會自動將 model 序列化成 JSON,XML或其他格式,並將序列化後的資料寫入HTTP response message 的本文(body)中。client 端(通常是瀏覽器)會讀取序列化後資料並反序列化它。
新增一個model,先在Models 資料夾上按滑鼠右鍵,選擇 “加入"=> "類別"

輸入類別名稱: Products後再按下"新增"

輸入以下程式,建立一個類別,分別有編號、名稱、類別及價格等屬性。



新增一個 Controller(控制項)
在Web API 一個 controller是一個用來操緃 HTTP request(請求)的物件。
新增一個controller,先在Controllers 資料夾上按滑鼠右鍵,選擇 “加入"=> "控制項"


撰擇 “Web API控制器-空白"再按下"新增"


輸入控制器名稱-ProductsController,再按下"加入"。在新建立的控制器中輸入以下程式:
       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);
       }
同時記得要引用(using) ProductsApp.Models

本範例中為了簡單化,以陣列資料來代表資料庫的資料表。
在這個控制器中定義了二個方法(method):
  • GetAllProducts 回傳所有整個產品資料
  • GetProductById 回傳某個編號的產品資料

這兩個方法透過URL的呼叫方式如下:

Controller Method
URI
GetAllProducts
/api/products
GetProductById
/api/products/id




使用Javascript/jQuery 呼叫Web API
我們要建立一個Html Page透過AJAX方式去呼叫 web API。在這個Html page中使用的是jQuery語法,由web API回傳的結果將用來更新Html page(網頁)。
在方案總管按下滑鼠右鍵,點選"加入"=>"HTML網頁"

輸入網頁名稱: Index,按下確定。用以下內容取代Index.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" 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 () {
     
// 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 getJSON指令傳送 AJAX request。並回傳一個含有JSON格式的陣列物件,再透過一個 callback function將回傳資料更新至網頁中。

執行程式
執行結果如下圖:



使用F12觀查Http Request(請求) 及 Response(回應)




本文出自:

沒有留言:

張貼留言