如何在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**響應。

更新於:2020年8月19日

2K+瀏覽量

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告