C# &引用;“内部服务器错误”;在Web API Post方法中序列化JSON时

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

我有一个服务器,它使用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; }
}
现在,当我发送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)