使用Web API,当我返回如下的简单对象时,一切正常;
[HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
[HttpGet]
[Route("UserInfo")]
public User GetUserInfo() {
string id = User.Identity.GetUserId();
User usr = db.Users.Find(id);
return user;
}
但是,当我尝试将子记录添加到我的对象时,如下所示(用户在' Friends'集合中有一个AppUserInfo对象列表),那么我可以看到API返回一个填充了用户的用户列表(如预期的那样),但我收到了' null'客户的内容。
User user = db.Users
.Where(u => u.Id == id)
.Include(u => u.Friends)
.FirstOrDefault();
return user;
我试图在客户端上这样调用,但是收到错误' null'内容和' response.IsSuccessStatusCode'是假的。它可能是在序列化子集合时遇到问题吗?
var response = await client.GetAsync("api/Account/UserInfo");
有人可以解释为什么会这样吗?
答案 0 :(得分:2)
Kenneth提供的答案。
辅助对象有一个返回父对象的引用,导致序列化中断。
例如:
public class User {
public int UserId { get; set; }
public string name { get; set; }
public List<UserInfo> Infos { get; set; }
}
public class UserInfo {
public int UserInfoId { get; set; }
[ForeignKey]
public int UserId { get; set; }
public User user { get; set; }
}