如何在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+浏览量

开启您的职业生涯

完成课程获得认证

开始学习
广告