使用Linq的Web Api“文档末尾的额外内容”错误

时间:2012-05-15 18:58:06

标签: c# asp.net odata iqueryable asp.net-web-api

当我尝试查询MVC 4 WebApi服务时出现以下错误

Extra content at the end of the document

Below is a rendering of the page up to the first error.

55Author Namehttp://images.myserver.com/authorspictures/nophoto.jpg

我查看了Linq To Sql生成的Author类,发现在图像URL之后的Author对象的下一个属性就是这个:

    [Association(Name = "Author_Quote", Storage = "_Quotes", ThisKey = "Id", OtherKey = "AuthorId")]
    public EntitySet<Quote> Quotes { get; set; }

我的承诺是,为此属性生成XML会导致上述错误。但是,我不知道如何防止这种情况并使其正常工作。我发现的关于webApi的大多数例子都使用了POCO列表,所以他们无法帮助我解决这个问题。

有任何建议吗?

以下是我的代码

public class AuthorController : ApiController
{
    IAuthorRepository repository;

    public AuthorController(IAuthorRepository repository)
    {
        this.repository = repository; 
    }

    [ResultLimit(20)]
    public IQueryable<Author> GetAuthors(){
        return repository.GetAuthors(); 
    }
}



public class DBAuthorRepository : IAuthorRepository
{
    public IQueryable<Author> GetAuthors()
    {
        using (var context = new QuotesDataContext())
        {  
            return context.Authors.ToList().AsQueryable();
        }
    }
}

2 个答案:

答案 0 :(得分:3)

我发现它是由延迟加载引起的。所以我添加了以下内容,现在它可以正常工作。

public class DBAuthorRepository : IAuthorRepository
{
    public IQueryable<Author> GetAuthors()
    {
        using (var context = new QuotesDataContext())
        {  
            context.DeferredLoadingEnabled = false; // Added this line
            return context.Authors.ToList().AsQueryable();
        }
    }
}

答案 1 :(得分:0)

我在mvc4 webapi中遇到上述错误,从@alexandrekow回答,我找到了解决方案:

 entity = new BrewedlifeEntities();
 entity.ContextOptions.ProxyCreationEnabled = false; // Added this line