選擇 WEB API
修改 ValuesController 如下,不用資料庫取存,只要 Http 的部分可以運作,資料庫存取 is nothing。
using System; using System.Collections.Generic; using System.Web.Http; namespace MvcApplication1.Controllers { public class ValuesController : ApiController { private ListuserList; public ValuesController() { userList = new List (); userList.Add(new Models.User() { Id = 1, Name = "Jerry" }); userList.Add(new Models.User() { Id = 2, Name = "Tom" }); } public IEnumerable Get() { return userList; } } }
接下來,新增一個自訂類別:BasicAuthenticationAttribute,建立驗證 Basic Authentication
using System; using System.Collections.Generic; using System.Web.Http.Filters; using System.Net.Http; using System.Security.Principal; namespace MvcApplication1 { public class BasicAuthenticationAttribute : AuthorizationFilterAttribute { public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) { base.OnAuthorization(actionContext); if (actionContext.Request.Headers.Authorization == null) { actionContext.Response = actionContext.Request.CreateResponse(System.Net.HttpStatusCode.Unauthorized); } else { string token = actionContext.Request.Headers.Authorization.Parameter; string decode = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(token)); string[] value = decode.Split(':'); string id = value[0]; string pwd = value[1]; if (id == "jerry" && pwd == "123") { System.Threading.Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(id), null); } else { actionContext.Response = actionContext.Request.CreateResponse(System.Net.HttpStatusCode.Unauthorized); } } } } }
Controller 必須套用這個自訂類別
[BasicAuthentication] public class ValuesController : ApiController{...}
趕快來測試一下 Web Api 是否可以運作,使用 Chrome 安裝 POSTMAN 的外掛 https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=zh-TW
點選 POSTMAN 會出現帳號登入,可以 SKIP。進入 POSTMAN 前請將 VISUAL STUDIO 啟用 DEBUG 模式,將網址貼至 POSTMAN,點選 Authorization,Type 選 Basic Auth,輸入帳:jerry,密:123,設定完成請點選橘色按鈕 Update Request。
之後按下藍色按鈕 Send,看到資料回來了,我們打完收工先去開一場 lol再回來。
打完lol了,回來看看注意事項,網址 http://localhost:1056/api/Values,
不能用 http://localhost:1056/api/Values/Get,使用Get 需要加參數。
再來就是網址貼到 Chrome 執行http://localhost:1056/api/Values,會是空白頁!
因為網址存需時沒有傳送 Basic Auth 的資訊,才會出現 401 Unauthorized 未驗證(因為Controller套用了[BasicAuthentication]),測試正常!
另外,Web Api 的專案預設是傳回 xml,網上有不少人討論這個問題,
這篇文章的範例來說,拿掉 Controller 上面的[BasicAuthentication] 使用 IE 執行網址會下載一個 .json 檔案,
在 chrome 執行網址會變成 xml 格式,
在地球上最具權威的IT論壇上有多種解法, http://stackoverflow.com/questions/9847564/how-do-i-get-asp-net-web-api-to-return-json-instead-of-xml-using-chrome, 裡面有位 Yakir Manor的解法較簡單。
這文章發問區塊有個Natan提供了ASP.NET MVC GITHUB 連結,GITHUB 上有人建議 Consider only adding the JSON formatter by default,
意思就是預設改為 JSON 的格式!
https://github.com/aspnet/Mvc/issues/1765
良心建議各位查詢資料以英文為主,留下技術文章不是為了得到 MS MVP,不是為了要申請MVP 要資料審查,而是留下進步的過程!有沒有 MVP 的差別是什麼?MVP 滿足了你的什麼?笑傲江湖:「人在江湖,名聲和信譽不是哪門哪派給你的,憑的是你心中的信念」
藏招文化在台灣IT 業屢見不鮮,看著那些學 WEB FORM 的人認為自己所學是真正的尖端技術,卻不知道自己做出來的網站有著 CONNECTION POOL 超過限制的問題,
緊緊抓著自己僅有的技術不放,而錯過不斷進步的機會!
小弟勸各位把技術分享給別人,自己不斷學習新的技術,這才是上上策!
沒有留言:
張貼留言