本节是前面两节的延续,前面我们为Web API创建了必要的基础设施,并实现了Get方法。在这里,我们将在Web API中实现POST方法。
在RESTful架构中,使用HTTP POST请求用来在数据源中创建一个新的记录。让我们在StudentController中创建一个Post操作方法来使用实体框架在数据库中插入新学生记录。
处理HTTP POST请求的操作方法命名必须以Post开头。可以直接叫Post,也可以叫以Post开头的任何名字,例如:POST(), Post(), PostNewStudent(), PostStudents()等都是合格的命名。
下面的例子演示了用来处理HTTP Post请求Post操作方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class StudentController : ApiController { public StudentController() { } //Get action methods of the previous section public IHttpActionResult PostNewStudent(StudentViewModel student) { if (!ModelState.IsValid) return BadRequest( "Invalid data." ); using (var ctx = new SchoolDBEntities()) { ctx.Students.Add( new Student() { StudentID = student.Id, FirstName = student.FirstName, LastName = student.LastName }); ctx.SaveChanges(); } return Ok(); } } |
正如您所看到的,我们将Action方法命名为PostNewStudent。你可以按你的要求取任何名称,但必须以“Post”这个词开头。PostNewStudent()操作方法包括StudentViewModel类型的参数,该参数包括新学生的所有的信息。
在Post方法,我们首先需要使用ModelState.IsValid验证模型,这将确保学生对象包括所有必要的信息。如果它是无效的,那么你可以返回BadRequest响应。如果它是有效的,那么使用实体框架上下文添加学生并返回200 OK状态的响应。
注意:这只是一个演示项目,如果需要的话,您可以在返回信息中返回新创建的学生对象的Id。
现在,您可以使用Fiddler发送HTTP POST请求,如下所示。
正如你在上面的图中所看到的,HTTP POST请求包括JSON格式的StudentViewModel对象的请求主体。
成功执行后返回200 OK响应状态。
接下来,我们将学习如何在Web API中实现Put动作方法来处理HTTP Put请求的。