首页 > 解决方案 > 如何使每个控制器都可以访问启动时创建的数据?

问题描述

我正在使用 OData 和 ASP.NET Core 来处理 Oracle 数据库。我有一个 Startup.cs 文件,我在其中配置身份验证、构建模型并加载所有依赖项。我还在阅读一个配置文件来加载像这样标识的自定义 odata 控制器:

CustomControllerList": [
{           
  "Assembly": "assemblyName",
  "PublicToken" : "123456789",
  "Controller": "UsersController",
  "Name": "Users",
  "Entity": "ModelNameSpace.UserEntity",
  "AccessRights" : [1, 2, 3]
},
{           
  "Assembly": "assemblyName",
  "PublicToken" : "123456789",
  "Controller": "GroupsController",
  "Name": "Users",
  "Entity": "ModelNameSpace.GroupsEntity",
  "AccessRights" : [4, 5, 6]
}]

我想存储与控制器相关的访问权限,以便在每个请求之前检查用户是否被授权。

关于每个请求之前的代码执行,我看到像这样创建一个新控制器的函数属性

public class AccessRightsFilterAttribute : Attribute, IActionFilter
    {
        public void OnActionExecuting(ActionExecutingContext context)
        {
            try
            {
                String username = Tools.GetUsernameFromToken(context.Controller as ControllerBase);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }

        public void OnActionExecuted(ActionExecutedContext context)
        {
            // do something after the action executes
        }
    }

我的第一个问题是:这是在每个请求之前执行代码的唯一解决方案吗?有没有办法避免必须为每个 OData 控制器的功能放置属性?

我无法在 Startup 执行中连接到 db,并且自定义 OData 控制器无法访问 Startup 项目。

所以我的第二个问题是:从 OData 控制器读取这些数据的最佳做法是什么?我没有找到任何东西,我唯一的选择是在文件中写入,但我想知道是否有更好的方法来做到这一点。

提前致谢 !

标签: c#asp.net-coreodata

解决方案


推荐阅读