Web API控制器的操作方法使用一些HTTP特性。因此,它们只能由特定的HTTP方法(称为动词)调用。
下表中定义HTTP特性:[HttpGet] public IEnumerable<Reservation> Get() => repository.Reservations;第二个action方法包含路由段,它能根据指定的id返回特定的对象,使用OK()方法返回状态码200并且同时也返回了一个对象到客户端,方法返回的的类型为ActionResult<Reservation>. 调用这个action方法的url:
https://localhost:7205/api/Reservation/1 https://localhost:7205/api/Reservation/2 https://localhost:7205/api/Reservation/3这个action方法如下所示:
[HttpGet("{id}")] public ActionResult<Reservation> Get(int id) { if (id == 0) return BadRequest("Value must be passed in the request body."); return Ok(repository[id]); }如果客户端在请求中没有发送id在这种情况下我们将获取默认值为0,因此我返回BadRquest()响应。Http Get请求可以直接在浏览器中调用,运行应用程序并且进入URL https://localhost:44324/api/Reservation, 你将会看到所有的对象以JSON格式返回:
[HttpPost] public Reservation Post([FromBody] Reservation res) => repository.AddReservation(new Reservation { Name = res.Name, StartLocation = res.StartLocation, EndLocation = res.EndLocation });四. HttpPut方法
// 堆代码 duidaima.com [HttpPut] public Reservation Put([FromForm] Reservation res) => repository.UpdateReservation(res);[FromForm]特性在参数中确保客户端发送的表单数据能够绑定到Reservation对象,这里使用模型绑定技术,这个方法以JSON格式返回更新的Reservation对象。你可以在参数中使用[FromBody]特性替换[FromForm]特性,这取决于客户端发送数据的格式,如果你使用FromBody特性,数据以JSON格式发送,否则FromForm特性以表单数据发送。
https://localhost:7205/api/Reservation/1 https://localhost:7205/api/Reservation/2 https://localhost:7205/api/Reservation/3注意:Reservation被删除通过传递第三段url,这个方法显示如下:
[HttpDelete("{id}")] public void Delete(int id) => repository.DeleteReservation(id);六. HttpPatch方法
[ { "op": "replace", "path": "Name", "value": "Ram"}, { "op": "replace", "path": "StartLocation", "value": "Moscow"} ]JSON有op属性指定操作的类型,path指定该操作应用那个属性,value表示指定的新的值。ASP.NET Core 将自动处理JSON数据并将其作为JsonPatchDocument<T>对象发送到操作方法,其中T是要修改的模型对象的类型(在这里是Reservation对象)
[HttpPatch("{id}")] public StatusCodeResult Patch(int id, [FromBody] JsonPatchDocument<Reservation> patch) { var res = (Reservation)((OkObjectResult)Get(id).Result).Value; if (res != null) { patch.ApplyTo(res); return Ok(); } return NotFound(); }调用Get(id)方法获取reservation并且转化成OkObjectResult,随后进行了一次强制类型转换以获取Reservation类型对象中的值 -
var res = (Reservation)((OkObjectResult)Get(id).Result).Value;如果你使用的ASP.NET Core 版本3及以上的 Web API,你需要使用AddNewtonsoftJson 替代了用于格式化所有JSON内容的基于 System.Text.Json 的输入和输出格式化程序。因此,必须在你的API项目中启用JSON Patch支持。安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet 包在 Program.cs 中调用 AddNewtonsoftJson() 方法,如下面的代码所示:
builder.Services.AddControllersWithViews().AddNewtonsoftJson();下面的表格总结了每个action方法的工作详细: