内部服务器错误;同时在Web API Post方法中序列化JSON
本文关键字:Post API 方法 JSON 序列化 Web 错误 服务器 内部 | 更新日期: 2023-09-27 18:08:53
我有一个使用ASP与客户端通信的服务器。. NET Web API.
我的模型在服务器端更详细,客户端有更少的数据,所以我使用[DataContract]/[DataMember]来匹配两者。
下面是服务器端的模型:
[DataContract]
public class Discussion
{
public Discussion()
{
this.Posts = new HashSet<Post>();
this.Members = new HashSet<UserProfile>();
}
[DataMember]
public int DiscussionId { get; set; }
[DataMember]
public int AuthorId { get; set; }
public int CategoryId { get; set; }
[Required]
[MinLength(4)]
[MaxLength(140)]
[DataMember]
public string DiscussionSubject { get; set; }
[Required]
[MinLength(10)]
[MaxLength(10000)]
[DataMember]
public string DiscussionDescription { get; set; }
[Required]
[DataMember]
public DateTime CreateDate { get; set; }
[Required]
[DataMember]
public DateTime LastChangeDate { get; set; }
[NotMapped]
[DataMember]
public int NumberOfPosts { get { return Posts.Count; } }
[DataMember]
public virtual UserProfile Author { get; set; }
public virtual Category Category { get; set; }
public virtual ICollection<UserProfile> Members { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
这是客户端模型:
[DataContract]
public class Discussion
{
[DataMember]
public int DiscussionId { get; set; }
[DataMember]
public int AuthorId { get; set; }
[DataMember]
public string DiscussionSubject { get; set; }
[DataMember]
public string DiscussionDescription { get; set; }
[DataMember]
public DateTime CreateDate { get; set; }
[DataMember]
public DateTime LastChangeDate { get; set; }
[DataMember]
public int NumberOfPosts { get; set; }
[DataMember]
public virtual UserProfile Author { get; set; }
}
现在,当我发送一个post请求,我得到一个内部服务器错误,甚至没有达到post方法点,而我调试
Discussion discussion = new Discussion
{
DiscussionSubject = subject,
DiscussionDescription = description,
};
response = await client.PostAsJsonAsync(requestUri, discussion);
response.EnsureSuccessStatusCode();
我猜问题出在反序列化上,因为当我把模型改成另一个模型时,一切正常。这将很好地知道,当我发送Get
请求时,一切都是正常的。
我怎么能解决这个问题,我在哪里可以看到什么是内部服务器错误到底?
EDIT:这是服务器端的Post方法:
public HttpResponseMessage Post(Discussion discussion)
我希望反序列化在这里自动发生(从接收到的客户端Discussion
到服务器Discussion
)。
我怀疑你的对象图中有循环引用,显然不能JSON序列化。因此,您的HTTP请求永远不会发送到服务器,因为客户端不知道如何JSON序列化您的模型。
例如,如果您的UserProfile
模型引用了Discussion
模型,则可能发生这种情况。因为Discussion
模型参考了UserProfile
模型,你就有问题了。
要解决这个问题,你应该使用视图模型,而不是在你的Web API中公开你的域模型。