使用Web API OData在URI中指定的查询无效

时间:2012-10-29 12:29:13

标签: c# web-applications asp.net-mvc-4 asp.net-web-api odata

我的项目是基于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中指定的查询无效?

1 个答案:

答案 0 :(得分:2)

向OdataModelBuilder添加继承支持

用户现在可以定义从另一个实体类型派生的抽象实体类型和实体类型。 OData不支持复杂类型继承。

此提交仅在ModelBuilder中添加了支持。 ODataConventionModelBuilder,ODataMediaTypeFormatter和Query支持中的继承支持仍在等待中。

参考:http://aspnetwebstack.codeplex.com/SourceControl/changeset/f4c252a30e68

要解决上述问题,请使用以下步骤:

  1. http://www.nuget.org/packages/Microsoft.AspNet.WebApi.OData
  2. 安装nuget包
  3. 将Id属性的类型更改为字符串(这是因为对象类型在OData中不是受支持的类型。您应该将您的ID设为 odata原始类型,如字符串)。
  4. 从Application_Start中删除所有配置。
  5. 将config.EnableQuerySupport()添加到WebApi.config。