建立 OData v4 用戶端應用程式 (C#)
演講者:Mike Wasson
在上一教學課程中,您建立了支援 CRUD 操作的基本 OData 服務。 現在讓我們為該服務建立一個用戶端。
啟動 Visual Studio 的新執行個體並建立新的主控台應用程式專案。 在「新專案」對話方塊中,選擇「已安裝>範本>Visual C#>Windows 桌面」,然後選擇「主控台應用程式」範本。 將專案命名為「ProductsApp」。
注意
您也可以將主控台套用新增至包含 OData 服務的相同 Visual Studio 解決方案。
安裝 OData 用戶端程式碼產生器
從「工具」功能表中,選擇「擴充和更新」。 選擇「線上>Visual Studio 庫」。 在搜尋框中,搜尋「OData 用戶端程式碼產生器」。 按一下「下載」以安裝 VSIX。 系統可能會提示您重新啟動 Visual Studio。
在本地執行 OData 服務
從 Visual Studio 執行 ProductService 專案。 預設情況下,Visual Studio 會啟動瀏覽器存取應用程式根目錄。 記下 URI;您在下一步中將需要它。 讓應用程式保持執行。
注意
如果將兩個專案放在同一個解決方案中,請確保執行 ProductService 專案而不進行偵錯。 在下一步中,您需要在修改主控台應用程式專案時保持服務執行。
產生服務 Proxy
服務 Proxy 程式是一個 .NET 類別,它定義了存取 OData 服務的方法。 Proxy 將方法呼叫轉換為 HTTP 請求。 您將透過執行 T4 範本來建立 Proxy 類別。
以滑鼠右鍵按一下專案。 選取 [新增]>[新項目]。
在「新增項目」對話方塊中,選擇「Visual C# 項目>程式碼>OData 用戶端」。 將範本命名為「ProductClient.tt」。 點擊「新增」並點擊安全性警告。
此時,您將收到一個錯誤,您可以忽略該錯誤。 Visual Studio 會自動執行範本,但範本首先需要一些設定。
開啟 ProductClient.odata.config 檔案。在 Parameter
元素中,貼上來自 ProductService 專案的 URI (上一步)。 例如:
<Parameter Name="MetadataDocumentUri" Value="http://localhost:61635/" />
再次執行範本。 在方案總管中,以滑鼠右鍵按一下 ProductClient.tt 檔案並選擇「執行自訂工具」。
此範本會建立一個名為 ProductClient.cs 的程式碼檔案來定義 Proxy。 在開發應用程式時,如果變更 OData 端點,請再次執行範本以更新 Proxy。
使用服務 Proxy 呼叫 OData 服務
開啟檔案 Program.cs 並將樣板程式碼替換為以下內容。
using System;
namespace ProductsApp
{
class Program
{
// Get an entire entity set.
static void ListAllProducts(Default.Container container)
{
foreach (var p in container.Products)
{
Console.WriteLine("{0} {1} {2}", p.Name, p.Price, p.Category);
}
}
static void AddProduct(Default.Container container, ProductService.Models.Product product)
{
container.AddToProducts(product);
var serviceResponse = container.SaveChanges();
foreach (var operationResponse in serviceResponse)
{
Console.WriteLine("Response: {0}", operationResponse.StatusCode);
}
}
static void Main(string[] args)
{
// TODO: Replace with your local URI.
string serviceUri = "http://localhost:port/";
var container = new Default.Container(new Uri(serviceUri));
var product = new ProductService.Models.Product()
{
Name = "Yo-yo",
Category = "Toys",
Price = 4.95M
};
AddProduct(container, product);
ListAllProducts(container);
}
}
}
將 serviceUri 的值替換為先前的服務 URI。
// TODO: Replace with your local URI.
string serviceUri = "http://localhost:port/";
當您執行該應用程式時,它應該輸出以下內容:
Response: 201
Yo-yo 4.95 Toys