如何在 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] 属性修饰。

