Asp.net web api WebAPI 2.2不支持函数的子字符串

Asp.net web api WebAPI 2.2不支持函数的子字符串,asp.net-web-api,odata,Asp.net Web Api,Odata,我有一个支持OData的WebAPI 2.2服务 我的控制器有一个返回IQuerable的操作,但即使我允许所有函数,我也无法使用$filter=substringof函数 [Authorize] public class MyController : ODataController { [EnableQuery(AllowedFunctions=AllowedFunctions.All)] public IQueryable<Entity> GetEntities(

我有一个支持OData的WebAPI 2.2服务

我的控制器有一个返回
IQuerable
的操作,但即使我允许所有函数,我也无法使用
$filter=substringof
函数

[Authorize]
public class MyController : ODataController
{
    [EnableQuery(AllowedFunctions=AllowedFunctions.All)]
    public IQueryable<Entity> GetEntities()
    {
      return GetMyQueryable();
    }
}
知道我为什么会看到这个错误吗?

substringof()
是一个V3函数,而
contains()
是一个V4函数

Try包含:

$filter=contains(Name,'Queen')

substringof()是一个V3函数,而contains是一个V4函数。如果contains不起作用,你能分享错误信息吗?我说contain是错误的,因为contain给出了同样的错误。当使用contain时,它表示“URI中指定的查询无效。不允许使用函数'StartWith'。若要允许,请在EnableQueryAttribute或QueryValidationSettings上设置'AllowedFunctions'属性。但我认为我正在做这部分。但是,AllowedFunctions枚举尚未更新以反映OData函数中的更改V4@QianLi感谢您指出V3/V4的区别。我没有注意到。由于AllowedFunctions enum列出了SubstringOf和no Contain,我认为SubstringOf仍然是解决问题的方法这不是一个直接的答案,但这为我指明了正确的方向,我仍然不知道确切的问题是什么,但我创建了一个新的WebAPI和项目,它只支持contains函数。然后,我删除了原始WebAPI中所有不必要的NuGet包,这似乎解决了这个问题。不需要使用AllowedFunctions枚举,默认情况下所有功能都已启用。这似乎解决了我的问题,我阅读了错误的文档,google引导我到这里,谢谢。
$filter=contains(Name,'Queen')