Asp.net web api Can';是否将复杂对象发布到web API?

Asp.net web api Can';是否将复杂对象发布到web API?,asp.net-web-api,Asp.net Web Api,我是网络API的新手。我正在尝试将Student{ID,Name,Age}对象发布到API控制器中的此操作方法: public void PostStudent([FromBody]Student student) //I omitted FromBody attr but it doesn't help { students.Add(student); } public class DefaultController : ApiController { List<Stu

我是网络API的新手。我正在尝试将
Student{ID,Name,Age}
对象发布到API控制器中的此操作方法:

public void PostStudent([FromBody]Student student) //I omitted FromBody attr but it doesn't help
{
    students.Add(student);
}
public class DefaultController : ApiController
{
    List<Student> students = new List<Student>
    {
        new Student { ID=1, Name="Rami", Age=67},
        new Student { ID= 2, Name="Nermeen", Age=44 },
        new Student { ID= 3, Name="Ashraf", Age= 30}
    };
    public List<Student> GetStudents()
    {
        return students.ToList();
    }
    public Student GetOne(int id)
    {
        return students.Find(s => s.ID == id);
    }
    //[ResponseType(typeof(Student))]
    public void PostStudent(Student student)
    {
        students.Add(student);
    }
}
学生
是一个
列表

在fiddler中,我以JSON格式向API发送POST请求,如下所示:

{
    "ID": 454,
    "Name": "Tamara",
    "Age": 15
}
我还将内容类型指定为application/json

但是执行这个请求不会添加数据吗

编辑

学生班级:

public class Student
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
这是ApiController:

public void PostStudent([FromBody]Student student) //I omitted FromBody attr but it doesn't help
{
    students.Add(student);
}
public class DefaultController : ApiController
{
    List<Student> students = new List<Student>
    {
        new Student { ID=1, Name="Rami", Age=67},
        new Student { ID= 2, Name="Nermeen", Age=44 },
        new Student { ID= 3, Name="Ashraf", Age= 30}
    };
    public List<Student> GetStudents()
    {
        return students.ToList();
    }
    public Student GetOne(int id)
    {
        return students.Find(s => s.ID == id);
    }
    //[ResponseType(typeof(Student))]
    public void PostStudent(Student student)
    {
        students.Add(student);
    }
}
public类DefaultController:ApiController
{
学生名单=新名单
{
新学生{ID=1,Name=“Rami”,年龄=67},
新生{ID=2,Name=“Nermeen”,年龄=44},
新学生{ID=3,Name=“Ashraf”,年龄=30}
};
公众学生名单
{
返回学生;
}
公立学生GetOne(内部id)
{
返回students.Find(s=>s.ID==ID);
}
//[响应类型(类型(学生))]
公开无效博士后(学生)
{
学生。添加(学生);
}
}

根据您最后的评论:

请记住,api控制器是为每个请求重新创建的,因此,如果您只是将数据添加到控制器上的属性中,数据就不会持久化。请在此处查看请求生命周期:


您可以通过创建一个单例类来保存数据,也可以通过将数据存储在数据库中来持久化数据。

基于您最后的评论:

请记住,api控制器是为每个请求重新创建的,因此,如果您只是将数据添加到控制器上的属性中,数据就不会持久化。请在此处查看请求生命周期:


您可以通过创建一个单例类来保存数据,或者通过将数据存储在数据库中来保存数据。

您的
学生
C#类是什么样子的?如果你在你的控制器上设置了一个断点,那么当你发布到控制器上时,它是否一定会到达断点?
Student
只是一个简单的类,包含我提到的三个属性(
ID
Name
Age
)。我设置了一个breackpoint(我不知道我可以用API和Fiddler实现这一点,谢谢!)该对象已成功接收,流转到
Add
方法,但请求GET不会显示新对象,我正在为
Student
类和GET操作添加代码。您是否真的点击了控制器?如果没有,则需要验证对象的格式是否正确。我建议您将博士后中的输入类型更改为“动态”。这样你就可以检查收到的内容,并验证它是否与你认为发送的格式相匹配。你的
学生
C#class看起来像什么?如果你在你的控制器上设置了一个断点,那么当你发布到控制器上时,它是否一定会到达断点?
Student
只是一个简单的类,包含我提到的三个属性(
ID
Name
Age
)。我设置了一个breackpoint(我不知道我可以用API和Fiddler实现这一点,谢谢!)该对象已成功接收,流转到
Add
方法,但请求GET不会显示新对象,我正在为
Student
类和GET操作添加代码。您是否真的点击了控制器?如果没有,则需要验证对象的格式是否正确。我建议您将博士后中的输入类型更改为“动态”。通过这种方式,你可以检查收到的内容,并验证它是否与你认为要发送的格式匹配。我也想到了这一点,但在本教程中:他使用了相同的方法在他的示例中,列表是静态的,我猜这将允许get从同一实例检索数据,但前提是请求来自同一客户机。这可能适用于本例,但在实际场景中,您会将数据持久化到某种数据库中。与视频中的示例一样,无法确保以任何有意义和可靠的方式持久化数据。如果应用程序重新启动,它就消失了,如果控制器的新实例被创建(由另一个客户端创建),它就消失了,等等。我也想到了这一点,但在本教程中:他在他的示例中使用了相同的方法,列表是
静态的
,我猜这将允许get从同一实例检索数据,但前提是请求来自同一客户机。这可能适用于本例,但在实际场景中,您会将数据持久化到某种数据库中。与视频中的示例一样,无法确保以任何有意义和可靠的方式持久化数据。如果应用程序要重新启动,它就消失了,如果控制器的新实例(由另一个客户机创建),它就消失了,等等。