C# &引用;“内部服务器错误”;在Web API Post方法中序列化JSON时
我有一个服务器,它使用ASP.NET Web API与客户机通信 我在服务器端的模型更详细,客户端的数据更少,所以我使用[DataContract]/[DataMember]来匹配这两者 以下是服务器端的模型:C# &引用;“内部服务器错误”;在Web API Post方法中序列化JSON时,c#,asp.net-mvc,json,asp.net-web-api,httpclient,C#,Asp.net Mvc,Json,Asp.net Web Api,Httpclient,我有一个服务器,它使用ASP.NET Web API与客户机通信 我在服务器端的模型更详细,客户端的数据更少,所以我使用[DataContract]/[DataMember]来匹配这两者 以下是服务器端的模型: [DataContract] public class Discussion { public Discussion() { this.Posts = new HashSet<Post>(); this.Members = ne
[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; }
}
现在,当我发送post请求时,我得到了一个内部服务器错误,甚至在我调试时没有到达post方法点
Discussion discussion = new Discussion
{
DiscussionSubject = subject,
DiscussionDescription = description,
};
response = await client.PostAsJsonAsync(requestUri, discussion);
response.EnsureSuccessStatusCode();
我想问题在于反序列化,因为当我将模型更改为另一个模型时,它是好的。当我发送一个Get
请求时,一切都正常,这将是一个好消息
我如何解决这个问题,在哪里可以确切地看到内部服务器错误?
编辑:这是服务器端的Post方法:
public HttpResponseMessage Post(Discussion discussion)
我希望反序列化在这里自动发生(从收到的客户端
讨论
到服务器讨论
)。我怀疑您的对象图中有循环引用,显然无法JSON序列化。因此,HTTP请求永远不会发送到服务器,因为客户端不知道如何对模型进行JSON序列化
例如,如果您的UserProfile
模型引用了讨论
模型,则可能会发生这种情况。由于讨论
模型引用了用户配置文件
模型,因此您遇到了一个问题
要解决此问题,您应该使用视图模型,而不要在Web API中公开域模型。为什么不尝试序列化其中一种类型,然后将其反序列化为另一种类型,看看会出现什么错误?这个问题相当独立于web api。Hi@Darrel,我认为使用DataContract、DataMember自动进行序列化和反序列化。我说得对吗?。。我添加了更多详细信息如果您不是在本地运行应用程序,您是否可以尝试通过执行“config.IncludeErrorDetailPolicy=IncludeErrorDetailPolicy.Always”来启用详细的错误日志记录,但是如果需要一些信息,我可以得到这是一个自主机应用程序还是一个网络主机应用程序?非常感谢@Darin。我查看了一下,发现客户端中没有循环引用,
UserProfile
只有一个Username
属性。但另一方面,在服务器端,可能会出现这种情况,但我没有用[DataMember]
装饰它,从而避免了这种情况。
public HttpResponseMessage Post(Discussion discussion)