gpt4 book ai didi

c# - URI 中指定的查询使用 Web API OData 无效

转载 作者:行者123 更新时间:2023-11-30 17:09:13 24 4
gpt4 key购买 nike

我的项目是基于 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 Controller 是:

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'."}

为什么 URI 中指定的查询使用 Web API OData 无效?

最佳答案

向 OdataModelBuilder 添加继承支持

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

此提交仅在 ModelBuilder 中添加支持。对 ODataConventionModelBuilder 中的继承的支持、ODataMediaTypeFormatter 和查询支持仍在等待中。

引用:http://aspnetwebstack.codeplex.com/SourceControl/changeset/f4c252a30e68

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

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

关于c# - URI 中指定的查询使用 Web API OData 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13121645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com