如何在 C# ASP.NET\WebAPI 中限制对具有特定 HTTP 动词的方法的访问?

csharpserver side programmingprogramming更新于 2025/4/17 21:22:17

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(){
      //检索学生数据
      return Ok();
   }
    public IHttpActionResult Post([FromBody]Student student){
      //插入学生数据
      return Ok();
   }
   public IHttpActionResult Put([FromBody]Student student){
      //更新学生数据
      return Ok();
   }
   public IHttpActionResult Delete(int id){
      //删除学生数据
      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 请求时,我们得到了 405 Method Not Allowed 响应,因为它用 [HttpGet] 属性修饰。


相关文章