Asp.net web api Can';是否将复杂对象发布到web API?
我是网络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
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从同一实例检索数据,但前提是请求来自同一客户机。这可能适用于本例,但在实际场景中,您会将数据持久化到某种数据库中。与视频中的示例一样,无法确保以任何有意义和可靠的方式持久化数据。如果应用程序要重新启动,它就消失了,如果控制器的新实例(由另一个客户机创建),它就消失了,等等。