跳到主要内容
版本:3.0

上下文(Aegis.Context)

Aegis.Context 提供请求级运行时上下文访问能力。当前公开的核心入口是 ActionContext.Current,用于读取当前请求的请求标识、客户端信息和可透传请求头。

组件概览

字段说明
组件名称上下文
真实类库Aegis.Context
组件定位请求级运行时上下文访问
引入方式安装 NuGet,并通过 Aegis 默认请求管线自动填充
组件声明
核心类型ActionContext
依赖关系通常配合 Aegis.Core.Infrastructure 使用

这一个组件到底提供什么

当前 Aegis.Context 对外提供的是请求元信息,不是完整的用户会话框架。
ActionContext.Current 里目前重点有这些字段:

  • RequestId
  • UserAgent
  • IpAddress
  • Headers

如果你要读取当前登录用户、权限或令牌信息,那是认证与鉴权组件的职责,不是 Aegis.Context 本身的职责。

最小可用方式

只要请求已经进入 Aegis 的默认请求管线,就可以直接读取:

var requestId = ActionContext.Current.RequestId;
var userAgent = ActionContext.Current.UserAgent;
var ipAddress = ActionContext.Current.IpAddress;
var headers = ActionContext.Current.Headers;

最常见的使用场景

在控制器或服务中读取请求标识

var requestId = ActionContext.Current.RequestId;
Console.WriteLine(requestId);

这类用法适合:

  • 打印业务日志
  • 透传链路请求标识
  • 排查跨服务请求

读取请求头里的业务上下文

Headers 里保存的是经过过滤后的可用请求头字典。

if (ActionContext.Current.Headers.TryGetValue("X-Tenant-Id", out var tenantId))
{
Console.WriteLine(tenantId);
}

适合场景:

  • 租户标识透传
  • 医院编码、机构编码透传
  • 业务自定义 Header 透传

读取客户端来源信息

var ipAddress = ActionContext.Current.IpAddress;
var userAgent = ActionContext.Current.UserAgent;

适合场景:

  • 请求审计
  • 安全审查
  • 问题定位

它是怎么被填充的

ActionContext.Current 不是你手动创建的,而是在 Aegis 默认请求管线里自动写入。

可以这样理解:

  1. 请求进入应用
  2. 基础设施中间件生成或接收 X-Request-Id
  3. 基础设施中间件提取请求头、客户端 IP、User-Agent
  4. 把这些信息写入 ActionContext.Current

所以这一个组件通常要和 基础设施(Aegis.Core.Infrastructure) 配合看。

使用时要注意什么

它只在请求上下文里稳定可用

如果当前代码不在 HTTP 请求链路内,例如:

  • 应用启动初始化器
  • 某些后台任务
  • 独立控制台流程

就不要默认认为 ActionContext.Current 一定有值。

它不是当前用户上下文

当前 ActionContext 公开的数据重点是请求元信息,不直接等同于:

  • 当前用户身份
  • 当前角色权限
  • 当前令牌对象

如果你需要这些能力,应该继续看认证与鉴权组件。

不要把它当长期存储

ActionContext.Current 适合请求期间读取,不适合当作跨请求缓存或业务状态存储。

接入完成后怎么确认成功

你至少应该确认这些点:

  • 应用是通过 Aegis 默认启动方式运行的
  • 请求进入控制器时可以读到 ActionContext.Current
  • RequestId 能稳定透传
  • 自定义业务 Header 能在 Headers 里读到
  • 非请求场景不会误把 ActionContext.Current 当作必有值

下一步看哪里