1

我有一个使用 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 方法点

Discussion discussion = new Discussion
{
    DiscussionSubject = subject,
    DiscussionDescription = description,
};

response = await client.PostAsJsonAsync(requestUri, discussion);
response.EnsureSuccessStatusCode();

我想问题在于反序列化,因为当我将模型更改为另一个模型时,它很好。很高兴知道当我发送Get请求时,一切都正常。

我该如何解决这个问题,我在哪里可以看到确切的内部服务器错误是什么?

编辑:这是服务器端的 Post 方法:

public HttpResponseMessage Post(Discussion discussion)

我希望反序列化在这里自动发生(从接收到的客户端到Discussion服务器Discussion)。

4

1 回答 1

0

我怀疑你的对象图中有循环引用,显然不能被 JSON 序列化。因此,您的 HTTP 请求永远不会发送到服务器,因为客户端不知道如何 JSON 序列化您的模型。

例如,如果您的UserProfile模型引用了该Discussion模型,则可能会发生这种情况。而且由于Discussion模型引用了UserProfile模型,因此您遇到了问题。

要解决此问题,您应该使用视图模型,而不是在 Web API 中公开您的域模型。

于 2013-04-12T13:59:39.603 回答