首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >asp.net web api odataNo IdLink

asp.net web api odataNo IdLink
EN

Stack Overflow用户
提问于 2013-07-10 01:16:09
回答 1查看 775关注 0票数 0

我将Odata与web api结合使用,得到以下错误:

代码语言:javascript
复制
 <m:innererror>
<m:message>
The 'ObjectContent`1' type failed to serialize the response body for content type       'application/json; charset=utf-8'.
</m:message>
<m:type>System.InvalidOperationException</m:type>
 <m:stacktrace/>
<m:internalexception>
 <m:message>
No IdLink factory was found. Try calling HasIdLink on the EntitySetConfiguration for    'Tag'.
</m:message>
 <m:type>System.InvalidOperationException</m:type>

下面是我的OData配置:

代码语言:javascript
复制
  config.Routes.MapODataRoute("ODataRoute", "odata", CreateModel());
   static IEdmModel CreateModel()
    {
        var modelBuilder = new ODataModelBuilder();

        modelBuilder.EntitySet<Tag>("Tag");
        modelBuilder.EntitySet<Post>("Post");

        return modelBuilder.GetEdmModel();
    }

这是我的OData控制器

代码语言:javascript
复制
  public class TagController : EntitySetController<Tag, int>
{
    private readonly IUnitOfWork _unitOfWork;

    public TagController(IUnitOfWork unitOfWork)
    {
        _unitOfWork = unitOfWork;
    }


    public override IQueryable<Tag> Get()
    {
        return _unitOfWork.BlogTagQueries.GetAllTags().AsQueryable();
    }

    protected override Tag GetEntityByKey(int key)
    {
        return _unitOfWork.BlogTagQueries.GetTagById(key);
    }
}

谁能告诉我,为什么我会得到这个错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-10 01:28:18

您可能正在尝试使用ODataConventionModelBuilder而不是ODataModelBuilder。约定构建器将自动为您创建链接生成工厂。

因此,您可以更改代码,如下所示:

var modelBuilder = new ODataConventionModelBuilder();

如果您对如何自己创建链接工厂感到好奇,可以查看以下示例(特别是文件ODataServiceSample/ODataService/ModelBuilder.cs):

http://aspnet.codeplex.com/sourcecontrol/latest#Samples/WebApi/ODataServiceSample/ReadMe.txt

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17554326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档