如何在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**响应。
广告