如何在C# ASP.NET Web API中限制對使用特定HTTP動詞的方法的訪問?
HTTP動詞構成了我們“統一介面”約束的主要部分,併為基於名詞的資源提供了動作對應物。主要的或最常用的HTTP動詞(或方法,因為它們被恰當地稱為)是POST、GET、PUT、PATCH和DELETE。它們分別對應於建立、讀取、更新和刪除(或CRUD)操作。還有許多其他動詞,但使用頻率較低。在那些使用頻率較低的方法中,OPTIONS和HEAD比其他方法更常用。
動作方法可以命名為HTTP動詞,如Get、Post、Put、Patch或Delete。但是,為了提高可讀性,我們可以在HTTP動詞後附加任何字尾。例如,Get方法可以是GetAllStudents()或任何其他以Get開頭的名稱。
示例
public class DemoController : ApiController{ public IHttpActionResult GetAllStudents(){ //Retrieves students data return Ok(); } public IHttpActionResult Post([FromBody]Student student){ //Insert student data return Ok(); } public IHttpActionResult Put([FromBody]Student student){ //Update student data return Ok(); } public IHttpActionResult Delete(int id){ //Delete student data return Ok(); } }
另一種定義動作方法的HTTP動詞的方法(而不是命名)是使用**HTTP動詞屬性**。我們可以輕鬆地**限制對使用特定HTTP方法呼叫的ASP.NET Web API方法的訪問**。
示例
using DemoWebApplication.Models; using System.Collections.Generic; using System.Web.Http; namespace DemoWebApplication.Controllers{ public class DemoController : ApiController{ [HttpGet] //HttpVerb Attribute public IHttpActionResult FetchStudentsList(){ List<Student> students = new List<Student>{ new Student{ Id = 1, Name = "Mark" }, new Student{ Id = 2, Name = "John" } }; return Ok(students); } } }
現在讓我們嘗試使用POST請求訪問上面的動作方法。
我們可以看到,當我們向FetchStudentsList動作方法傳送POST請求時,由於它用[HttpGet]屬性修飾,我們得到了**405 Method Not Allowed**響應。
廣告