闽公网安备 35020302035485号
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方法的工作详细:
