跳到主要內容

發表文章

目前顯示的是有「web api」標籤的文章

How to secure ASP.NET MVC API: Part 1 (如何在ASP .NET MVC上保護REST API不被任意人士存取)

前言 基本上要保護API不被其他有心人士存取有很多種方法, 以下介紹兩種最常見的保護方式 1. 檢查Request Header有沒有特定的API Key Client跟Server在溝通時可以協調好Request Header裡應該要出現什麼特定的API Key字串才能證明是合法的請求 實作方法 - 使用Message Handler Step 1. (Optional) 安裝必要套件 Microsoft.AspNet.WebApi.WebHost Microsoft.AspNet.WebApi.Core Microsoft.AspNet.WebApi.Client 如果你的專案是 ASP.NET Web Application (.NET Framework)這種類型的話, 請務必安裝以上的套件 Step 2. 實作Message Handler來檢查每個進來的請求 在專案中新增一個目錄Handlers 接下來, 在這個目錄中新增一個APIKeyMessageHandler.cs 如下 <原始碼> 這個類別可以用來過濾請求, 當請求Header內沒有指定的字串時會被拒絕, Step 3. 註冊剛剛自訂義的Message Handler 修改Global.asax <原始碼> 加入以下兩行             GlobalConfiguration.Configure(WebApiConfig.Register);             GlobalConfiguration.Configuration.MessageHandlers.Add(new APIKeyMessageHandler()); Step 4. 新增一個API Controller "MyApiController" 來處理請求 <原始碼> 測試 如果請求裡面沒有帶APIKey, 最後會得到 {"message": "Invalid API Key"} 的結果 完整原始碼在這 ...

C# WEB API 無法回傳HttpStatusCode NotModified(304)

C# WEB API 無法回傳HttpStatusCode NotModified(304) 實務上在實作WEB API時, 通常會根據結果去回傳合適的HTTP Status Code(狀態碼), 當請求失敗時我們可以從狀態碼清楚地得知原因是什麼 有些狀態碼有其特殊的規範, 如 304 NotModified 如下所示, 這個API 若檢查到POST過來的資料(Activity)早已存在資料庫中時, 會回傳304還有碩誤訊息 "item exist already"         public async Task <IHttpActionResult> Post([FromBody]Activity activity)         {             if(Context.Activities.Any(a=>a.Id == activity.Id))             {                 return ResponseMessage(Request.CreateResponse(HttpStatusCode.NotModified, "item exist already" ));             } 而這是一個錯誤的示範 當使用POSTMAN測試時會報錯 Could not get any response There was an error connecting to   http://localhost:58671/api/history . Why this might have happened: The server couldn't send a response: Ensure that the backend is w...