Odata没有找到NavigationLink工厂
我目前正在开发mvc4 web api odata服务,我希望返回用户列表中的用户列表。 当我想获得用户时,我收到以下错误:
错误:
The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'. System.InvalidOperationException No NavigationLink factory was found for the navigation property 'Languages' from entity type 'MvcWebRole1.Models.User' on entity set 'Users'. Try calling HasNavigationPropertyLink on the EntitySetConfiguration. Parameter name: navigationProperty System.ArgumentException at System.Web.Http.OData.Builder.EntitySetLinkBuilderAnnotation.BuildNavigationLink(EntityInstanceContext instanceContext, IEdmNavigationProperty navigationProperty, ODataMetadataLevel metadataLevel) at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteNavigationLinks(EntityInstanceContext context, ODataWriter writer, ODataSerializerContext writeContext) at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteEntry(Object graph, IEnumerable`1 propertyBag, ODataWriter writer, ODataSerializerContext writeContext) at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteObjectInline(Object graph, ODataWriter writer, ODataSerializerContext writeContext) at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteFeed(Object graph, ODataWriter writer, ODataSerializerContext writeContext) at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteObjectInline(Object graph, ODataWriter writer, ODataSerializerContext writeContext) at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteObject(Object graph, ODataMessageWriter messageWriter, ODataSerializerContext writeContext) at System.Web.Http.OData.Formatter.ODataMediaTypeFormatter.c__DisplayClassa.b__9() at System.Threading.Tasks.TaskHelpers.RunSynchronously(Action action, CancellationToken token)
我的用户看起来像这样:
public class User { [Key] public int UserId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string UserName { get; set; } public string Password { get; set; } public virtual ICollection Languages { get; set; } public User() { Languages = new List(); } }
我的OData用户控件看起来像这样:
public class UsersController : EntitySetController { WorldChatContext db = new WorldChatContext(); public override IQueryable Get() { return db.Users.AsQueryable(); } protected override User GetEntityByKey(int key) { return db.Users.FirstOrDefault(p => p.UserId == key); } public override HttpResponseMessage Post(User entity) { db.Users.Add(entity); db.SaveChanges(); return base.Post(entity); } }
我正在调用我在我的路由中设置的以下url: http://127.0.0.1:81/odata/Users
: http://127.0.0.1:81/odata/Users
: http://127.0.0.1:81/odata/Users
如果我在我的用户模型中评论导航属性,它可以工作。
我究竟做错了什么? 我已经尝试将[Serializable,KnownType(typeof(Language))]放在我的用户类之上但由于某种原因我不能使用KnownType。 如何使用此导航属性使我的OData工作?
您缺少为语言设置的实体。 导航属性指向实体,必须绑定到实体集。 在模型构建器代码中,添加此行以解决问题。
builder.EntitySet("languages");
这样做是为了创建实体集’languages’。 约定模型构建器将导航属性绑定到实体集(如果有)。 因此,实体类型User
上的导航属性Languages
将绑定到实体集languages
。
- WebApi.Owin中的SuppressDefaultHostAuthentication还禁止webapi之外的身份validation
- WebAPI OData $跳过自定义IQueryable double应用
- 当我需要使用多个参数的POST方法而不是单独的模型?
- 我可以绕过MVC应用程序内的WebAPI控制器的组织身份validation吗?
- 如何从Windows服务调用WebAPI
- Owin SelfHost WebApi – 客户端在响应期间关闭连接会引发exception吗?
- 在ASP.NET Core Web API中注册新的DelegatingHandler
- Web API2 NinjectWebCommon.cs不会出现
- validationASP.NET Web API