c# - 如何使每个控制器都可以访问启动时创建的数据?
问题描述
我正在使用 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 控制器读取这些数据的最佳做法是什么?我没有找到任何东西,我唯一的选择是在文件中写入,但我想知道是否有更好的方法来做到这一点。
提前致谢 !
解决方案
推荐阅读
- json - 无法确定哪个属性值为空?
- c# - How to send log to url with nlogger in winform c#.?
- c# - 不确定为什么逻辑不会激活游戏对象
- c++ - 如何获取变体向量中元素的索引?
- postgresql - 在 jsonb (Postgres) 中转换日期
- java - jedis 的 Redis 连接问题
- azure - 在获得 azure blob 的租约后,我在哪里可以找到发布 ID 以便我可以发布它?
- python - Windows 提示 cmd 中无法识别 Python
- html - 重叠单元格的轮廓
- linux - 如何递归指定rpm.spec中文件夹的属性