我的项目是基于ASP.Net MVC Web API 4应用程序创建的。如果它的模型具有以下实现:
public class BaseEntity
{
public object Id {get; set;}
}
public class Entity1 : BaseEntity
{
public string Name {get; set;}
}
Wep API控制器是:
public class Entity1Controller : ApiController
{
...
[Queryable]
public IQueryable<T> Get()
{
return repository.Table.AsQueryable();
}
}
Web API配置具有以下设置:
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
...
ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<BaseEntity>("BaseEntity");
modelBuilder.EntitySet<Entity1>("Entity1");
IEdmModel model = modelBuilder.GetEdmModel();
GlobalConfiguration.Configuration.SetEdmModel(model);
}
}
因此,当在客户端应用程序中生成一个请求时:
$.getJSON("api/Entity1?$filter=Id eq '" + id + "'",
function (data) {
...
});
我的应用程序遇到以下错误:
{"Message":"The query specified in the URI is not valid.","ExceptionMessage":"Type 'Entity 1' does not have a property 'Id'."}
为什么使用Web API OData在URI中指定的查询无效?
答案 0 :(得分:2)
向OdataModelBuilder添加继承支持
用户现在可以定义从另一个实体类型派生的抽象实体类型和实体类型。 OData不支持复杂类型继承。
此提交仅在ModelBuilder中添加了支持。 ODataConventionModelBuilder,ODataMediaTypeFormatter和Query支持中的继承支持仍在等待中。
参考:http://aspnetwebstack.codeplex.com/SourceControl/changeset/f4c252a30e68
要解决上述问题,请使用以下步骤: