.net core OData.NET核心API-条件自动扩展($expand)
我正在开发一个具有OData功能的.NET核心Web API 对于某些实体,我希望在用户具有适当权限的情况下扩展某些属性 因此,我需要在API中处理这个$EXPLAND部分,而不需要用户专门要求他有权访问的嵌套实体 是否有一种方法可以有条件地应用.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
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。我最后也做了这个。。。我将编辑我的帖子并添加我所做的。我希望有一个更干净的解决方案:(