.net core OData.NET核心API-条件自动扩展($expand)

.net core OData.NET核心API-条件自动扩展($expand),.net-core,entity-framework-core,odata,expand,.net Core,Entity Framework Core,Odata,Expand,我正在开发一个具有OData功能的.NET核心Web API 对于某些实体,我希望在用户具有适当权限的情况下扩展某些属性 因此,我需要在API中处理这个$EXPLAND部分,而不需要用户专门要求他有权访问的嵌套实体 是否有一种方法可以有条件地应用AutoExpand属性 谢谢你的帮助 编辑(可能的解决方案) 我创建了一个新类,继承自EnableQueryAttribute,然后重写public override IQueryable ApplyQuery(IQueryable queryable

我正在开发一个具有OData功能的.NET核心Web API

对于某些实体,我希望在用户具有适当权限的情况下扩展某些属性

因此,我需要在API中处理这个$EXPLAND部分,而不需要用户专门要求他有权访问的嵌套实体

是否有一种方法可以有条件地应用
AutoExpand
属性

谢谢你的帮助

编辑(可能的解决方案)

我创建了一个新类,继承自
EnableQueryAttribute
,然后重写
public override IQueryable ApplyQuery(IQueryable queryable,ODataQueryOptions queryOptions)

在此方法中,我根据权限伪造了一个新的查询字符串:

public override IQueryable ApplyQuery(IQueryable queryable, ODataQueryOptions queryOptions)
{
    // Keep the original query string
    string originalQueryString = queryOptions.Request.QueryString.Value;
    
    // Suppose you can get the permissions as followed
    var lPermissions = this.GetPermissions(); 
    
    // Then create a query string based on it
    string forgedQueryString = this.GenerateQueryString(lPermissions);
    
    // Forge a new ODataQueryOptions
    queryOptions.Request.QueryString = new QueryString(forgedQueryString);

    var oQueryOptions = new ODataQueryOptions(queryOptions.Context, queryOptions.Request);

    var queryEntities = oQueryOptions.ApplyTo(queryable, new ODataQuerySettings()
    {
        PageSize = this.PageSize
    });

    // Reset the initial URL (to handle "@odata.nextLink")
    queryOptions.Request.QueryString = new QueryString(originalQueryString);

    return queryEntities;

}

如何定义或评估权限。我已经用URL重写完成了这项工作,但是在数据库中检索权限时,它的结尾非常混乱。用户可以使用JWT令牌调用API。我最后也做了这个。。。我将编辑我的帖子并添加我所做的。我希望有一个更干净的解决方案:(