Tool:Visual Studio 2013 Ultimate Update 4、OData Client Code Generator
OS:Windows 8.1
Microsoft ASP.NET Web API 2.2 for OData v4.0
本文改自原<使用OData擴充ASP.NET Web API>一文上半段。因ASP.NET Web API與OData開發相關套件改版,以致於程式語法和步驟有些不同。更新工具與設計步驟如下:
- 建立ASP.NET Web API專案:
- 從「Solution Explorer」視窗,選取專案下「Models」目錄,按滑鼠右鍵,選取「Add」-「New Item」加入一個新項目,選取「Class」,使用「Employee」當作名稱,按「Add」按鈕
- 為Employee類別加入Id、EmployeeName與Age三個屬性:
public class Employee {
public int Id { get; set; }
public string EmployeeName { get; set; }
public int Age { get; set; }
}
- 加入以下程式碼,讓EmployeesDB繼承自DbContext類別:
public class EmployeesDB : DbContext {
public DbSet<Employee> Employees { get; set; }
}
- 接著再新增一個EmployeesInitializer類別,繼承DropCreateDatabaseAlways<T>類別,改寫 Seed方法:
public class EmployeesInitializer : DropCreateDatabaseAlways<EmployeesDB> {
protected override void Seed( EmployeesDB context ) {
base.Seed( context );
var emps = new List<Employee>{
new Employee {
EmployeeName = "Mary",
Age =30
},
new Employee {
EmployeeName = "Candy",
Age =25
},
new Employee {
EmployeeName = "Lili",
Age =45
}
};
emps.ForEach( s => context.Employees.Add( s ) );
context.SaveChanges( );
}
}
- 修改專案根路徑下的Web.Config檔案,指定name為EmployeesDB:
<add name="EmployeesDB" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-WebApplication8-20141201124938.mdf;Initial Catalog=aspnet-WebApplication8-20141201124938;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
- 接著在Global.asax檔案內Application_Start方法中,加入程式碼,叫用Database類別SetInitializer方法來初始資料庫結構和資料表資料:
AreaRegistration.RegisterAllAreas( );
Database.SetInitializer<WebApplication8.Models.EmployeesDB>( new WebApplication8.Models.EmployeesInitializer( ) );
GlobalConfiguration.Configure( WebApiConfig.Register );
FilterConfig.RegisterGlobalFilters( GlobalFilters.Filters );
RouteConfig.RegisterRoutes( RouteTable.Routes );
BundleConfig.RegisterBundles( BundleTable.Bundles );
}
安裝套件
- 使用NuGet下載 Microsoft ASP.NET Web API 2.2 for OData v4.0 5.3.1
建立支援OData的控制器
- 「Solution Explorer」-專案-「Controllers」目錄上方按滑鼠右鍵,從快捷選單選擇「Add」-「Controller」。在這個階段Template設定為「Web API 2 controller Empty」,然後按下「Add 」按鈕:
- 設定控制器名稱為「EmployeesController」;
- 修改產生出的程式碼,讓EmployeesController類別繼承ODataController類別:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.OData;
using WebApplication8.Models;
namespace WebApplication8.Controllers
{
public class EmployeesController : ODataController {
EmployeesDB ctx = new EmployeesDB( );
[EnableQuery]
public IQueryable<Employee> Get( ) {
return ctx.Employees;
}
}
}
設定OData Endpoint
- 修改專案中的WebApiConfig.cs檔案,在WebApiConfig類別中Register方法中叫新增一個InitializeOData方法:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web.Http;
using Microsoft.Owin.Security.OAuth;
using Newtonsoft.Json.Serialization;
using System.Web.OData.Builder;
using Microsoft.OData.Edm;
using System.Web.OData.Extensions;
using WebApplication8.Models;
namespace WebApplication8
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
InitializeOData( config );
}
private static void InitializeOData( HttpConfiguration config ) {
ODataConventionModelBuilder modelBuilder = new ODataConventionModelBuilder( );
modelBuilder.EntitySet<Employee>( "Employees" );
IEdmModel model = modelBuilder.GetEdmModel( );
config.MapODataServiceRoute( routeName: "OData" , routePrefix: "odata" ,
model: model );
}
}
}
OData服務測試
- 執行網站,開啟瀏覽器,輸入OData服務所在Endpoint:「http://localhost:29633/OData」,可以看到以下描述服務的XML:
- 利用OData Query String Options「$metadata」來查詢Service Metadata Document
- 執行結果
- 查詢Employees
- 執行結果
安裝OData Client Code Generator
開啟Visual Studio 2013選單,Tools->Extension and Updates ,搜尋OData Client Code Generator,下載並安裝:
設計使用OData 的用戶端程式
- 在方案中加入一個主控台應用程式當用戶端。在「New Project」選取「Console Application」,名稱設定為「ODataClient」。
- 先按CTRL+F5 執行Web API專案
- 在ODataClient專案加入 OData Client
- 修改EmployeeClient1.tt檔案第九行程式碼,設MetadataDocumentUri的真正位置,
- 然後儲存tt檔,此時就會在tt檔下方,出現一個cs檔案,裏頭包含叫用Web API的代理程式碼:
- 在Main方法加入程式碼,呼叫Web API
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ODataClient {
class Program {
static void Main( string[ ] args ) {
Console.WriteLine( "OData Client is running ... " );
var container = new Default.Container( new Uri( "http://localhost:29633/OData" ) );
var emps = ( from emp in container.Employees
orderby emp.EmployeeName ascending
select emp
);
foreach ( var emp in emps ) {
Console.WriteLine( emp.Id + " , " + emp.EmployeeName );
}
Console.ReadLine( );
}
}
}
- 設定兩個專案同時執行
- 按CTRL+F5 執行專案,Client執行結果,正確呼叫到Web API
沒有留言:
張貼留言