WebApi c#rest web服务可以';无法通过对象列表
我正在构建一个简单的rest完整web服务来将数据存储到数据库中 这是我的代码:WebApi c#rest web服务可以';无法通过对象列表,c#,rest,asp.net-web-api,C#,Rest,Asp.net Web Api,我正在构建一个简单的rest完整web服务来将数据存储到数据库中 这是我的代码: [Route("InsertActivities")] [HttpPost] public HttpResponseMessage InsertActivities(ActivityExecutionDTO u) { try { if (u != null) { //TO DO } } catch (Excep
[Route("InsertActivities")]
[HttpPost]
public HttpResponseMessage InsertActivities(ActivityExecutionDTO u)
{
try
{
if (u != null)
{
//TO DO
}
}
catch (Exception e)
{
}
}
这是ActivityExecutionDTO类:
namespace WebService.Models
{
[DataContract(Name = "ActivityExecutionDTO")]
public class ActivityExecutionDTO
{
[DataMember(Name = "Username", Order = 1)]
public string UserName { get; set; }
[DataMember(Name = "Password", Order = 2)]
public string Password { get; set; }
[DataMember(Name = "IdClinicalDocument", Order = 3)]
public int IdClinicalDocument { get; set; }
[DataMember(Name = "ActivityDetails", Order = 4)]
public IQueryable<ActivityExecutionDetailDTO> ActivityDetails { get; set; }
}
}
namespace WebService.Models
{
[DataContract]
public class ActivityExecutionDetailDTO
{
[DataMember(Name = "Id")]
public int ID { get; set; }
[DataMember(Name = "IdClinicalDocument"), IgnoreDataMember]
public int IdClinicalDocument { get; set; }
[DataMember(Name ="IdActivity")]
public int IdActivity { get; set; }
[DataMember(Name = "DateExecution"), IgnoreDataMember]
public DateTime? DateExecution { get; set; }
[DataMember(Name = "Duration")]
public Int32? Duration { get; set; }
[DataMember(Name = "CalBurned")]
public Int32? CalBurned { get; set; }
[DataMember(Name = "Steps")]
public Int32? Steps { get; set; }
}
}
这就是我通过PostMan客户端传递的JSON:
{
"Username" : "t.g",
"Password" : "t",
"IdClinicalDocument" : 63,
"ActivityDetails" :
[
{
"Id" : 1,
"IdClinicalDocument" : 63,
"IdActivity" : 1,
"DateExecution" : null,
"Duration" : 150,
"CalBurned" : 9600,
"Steps" : 150
}
]
}
因此,如果我尝试检查我的代码,请执行以下代码:
u.ActivityDetails
每次都是空的
活动列表为空。错误在哪里?将IQueryable
更改为ICollection
IQueryable只存储查询定义,其中不能有数据,只能是ICollection。尝试
公共HttpResponseMessage InsertActivities([FromBody]ActivityExecutionDTO u)
对于初学者,您不希望跨层传递IQueryable。这与列表或数组不可互换,并且暴露了从系统中不打算与数据库对话的部分进行数据访问的可能性,从而增加了@KyleBurns所说的内容。将数据更改为使用具体的列表
或集合
。反序列化到接口类型是困难的(如果不是不可能的话)。模型绑定器应使用什么具体实例?将IQueryable更改为ICollection