標籤:
Technorati 標記: ASP.NET Web API
從參加工作開始就開始關注部落格園,在園子裡學到很多知識,看過很大大牛的文章,確從未發表過一個字。最近剛剛換了公司,學習Web API,就此開始我的第一篇文章吧,也作為學習的記錄!
簡介就不多介紹,說說我對ASP.NET Web API 的一點點理解。
不同於 Web Service、WCF, ASP.NET Web API 直接存取和處理 Http 請求和響應,在開發中,減少了很多工作,讓人感覺一切是如此順暢。
首先,建立一個 ASP.NET MVC 4 Web Application
選擇 Web API
建立成功後,會預設產生一個樣本。
public class ValuesController : ApiController{ // GET api/values public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } // GET api/values/5 public string Get(int id) { return "value"; } // POST api/values public void Post([FromBody]string value) { } // PUT api/values/5 public void Put(int id, [FromBody]string value) { } // DELETE api/values/5 public void Delete(int id) { }}
我這裡是偷了個懶,直接使用了 NorthWind 資料庫,從網上下載一個 NorthWind 資料庫還原到本地的 SQL Server 中,然後建立一個 ADO.NET Entity Data Model
選擇 Generate from database,Next
點擊 New Connection
選擇本機資料庫,輸入使用者名稱密碼,選中 NORTHWIND,測試連接成功,OK
選擇Yes (會產生一個App.Config檔案,成功之後,要把裡面 NORTHWINDEntities 的 connectionStrings 拷到 Web 項目的 WebConfig 中),點擊 Next
選中Tables,Finish
在 Models中 Add 一個新的 Class, Employee
從 edmx 檔案的 Employee類裡,把屬性拷出來
public class Employee{ public int EmployeeID { get; set; } public string LastName { get; set; } public string FirstName { get; set; } public string Title { get; set; } public string TitleOfCourtesy { get; set; } public Nullable<System.DateTime> BirthDate { get; set; } public Nullable<System.DateTime> HireDate { get; set; } public string Address { get; set; } public string City { get; set; } public string Region { get; set; } public string PostalCode { get; set; } public string Country { get; set; } public string HomePhone { get; set; } public string Extension { get; set; } public byte[] Photo { get; set; } public string Notes { get; set; } public Nullable<int> ReportsTo { get; set; } public string PhotoPath { get; set; }}
我使用了AutoMapper 將 DTO 轉化為 Model,如果沒有的可以使用 NuGet 下載一個
使用方法參考:https://github.com/AutoMapper/AutoMapper/wiki
之後開啟 Global.asax.cs,添加 Mapper 方法,這樣在 Controller 中,就可以直接轉化了。
protected void Application_Start()
{ AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); Mapper();}private void Mapper(){ //model to dto AutoMapper.Mapper.CreateMap<DX.MVCWebAPI.Models.Employee, DX.DataAccess.Employee>(); //dto to model AutoMapper.Mapper.CreateMap<DX.DataAccess.Employee, DX.MVCWebAPI.Models.Employee>();}
儲存好之後,建立一個 Controller,EmployeesController
添加下面的方法,AutoMapper 可以直接將 DTO 的集合換位 Model 的集合
public IEnumerable<Models.Employee> GetAllEmployees()
{
var list = new List<Models.Employee>(); using (var context = new NORTHWNDEntities()) {
list = AutoMapper.Mapper.Map<System.Data.Entity.DbSet<DataAccess.Employee>, List<Models.Employee>>(context.Employees); }
return list.ToArray();
}
最後在Views/Home 裡增加一個新的View, Employee,記得在HomeController 裡增加Action
Employee View 頁面代碼
<div id="body"> <input type="button" id="getAll" value="GetAll" /> <div id="employeeAll"> </div> <script src="~/Scripts/jquery-1.8.2.min.js"></script> <script type="text/ecmascript"> $().ready(function () { $("#getAll").click(function () { $.getJSON("/api/v1/Employees") .done(function (data) { var html = "<ul>"; $(data).each(function (i, item) { html += "<li>" + item.EmployeeID + " | " + item.LastName + " " + item.FirstName + " | " + item.Title + "</li>"; }); html += "</ul>"; $("#employeeAll").html(html); }); }); }); </script></div>
執行程式,點擊 GetAll,大功告成。
有不對的地方,歡迎大家指出。
作為一名苦逼的程式猿,謹以此記錄成長路上的點點滴滴。
ASP.NET Web API 學習 一