4

我遇到了 WebAPI 返回空 500 的问题。

这是数据类。

public class Comment
{
    public int Id { get; set; }
    public string Content { get; set; }
    public string Email { get; set; }
    public bool IsAnonymous { get; set; }

    public int ReviewId { get; set; }
    public Review Review { get; set; }
}
public class Review
{
    public int Id { get; set; }
    public string Content { get; set; }

    public int CategoryId { get; set; }
    public string Topic { get; set; }
    public string Email { get; set; }
    public bool IsAnonymous { get; set; }

    public virtual Category Category { get; set; }
    public virtual ICollection<Comment> Comments { get; set; }
}

这是来自 ReviewRepository.cs 的代码

public Review Get(int id)
{
    return _db.Reviews.Include("Comments").SingleOrDefault(r => r.Id == id);
}

以及来自 ReviewController.cs 的代码

public HttpResponseMessage Get(int id)
{
    var category = _reviewRepository.Get(id);
    if (category == null)
    {
        return Request.CreateResponse(HttpStatusCode.NotFound);
    }
    return Request.CreateResponse(HttpStatusCode.OK, category);
}

无论我做什么,从 /api/reviews/1 返回的响应都是 500 错误。调试时,类别正确,所有评论都已加载。

我试过GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;了,但这没有帮助。我在这里不知所措!

4

3 回答 3

5

我猜这是因为你有一个圆形对象图,这会导致序列化错误。

http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization#handling_circular_object_references

于 2012-06-27T14:13:42.100 回答
0

我遇到了同样的问题。除了 GlobalConfiguration 策略,您可能需要在 web.config 中包含以下内容。

<system.webServer>
  <httpErrors existingResponse="PassThrough" />
</system.webServer>
于 2012-06-27T11:51:58.490 回答
0

它可能是ICollection<Comment> Commentsor的序列化Category Category

于 2012-06-27T12:26:14.073 回答