agilelabs-fx-docs main fundamentals/sessions/intro.md

请求 Session (IRequestSession)

IRequestSession 封装了从 HttpContext 解析请求上下文信息的逻辑,默认实现为 DefaultRequestSession

能力范围

成员 说明
ClientIp 自动解析 X-Forwarded-Forcf-visitorREMOTE_ADDR,并在测试环境回退到 127.0.0.1
Scheme / Host / HostWithScheme 支持多重代理(X-Forwarded-Proto/Host),自动选择第一个有效值。
Tid / Sid ContextItemsNames.TranceId、Header 中获取 Trace/Span Id。
UpstreamIp 取自 HttpContext.Connection.RemoteIpAddress,可用于安全审计。
LangCode 读取 CustomHttpHeaders.LANG_CODE,默认为 zh-cn
RequestPath / UserAgent / IsHttps 常规请求属性。

与 WorkContext 联动

  • WebWorkContextInitMiddleware 在请求开始时创建 IServiceScope,并将 IRequestSession 注入 IWorkContextCore
  • 业务代码可以通过扩展方法(例如 WorkContext.GetLoginUser())快速获取当前用户。

使用示例

public class TraceController : ControllerBase
{
    private readonly IRequestSession _requestSession;
    public TraceController(IRequestSession requestSession)
    {
        _requestSession = requestSession;
    }

    [HttpGet("/trace-info")]
    public object Get() => new
    {
        _requestSession.ClientIp,
        _requestSession.HostWithScheme,
        _requestSession.Tid
    };
}

相关配置

  • 需要在 DefaultMvcApplicationOptions 中确保 services.AddHttpContextAccessor(); 已注册(框架默认处理)。
  • 可通过自定义实现扩展,如记录 User-Agent 白名单、绑定租户信息等。

更多上下文能力:参见 WorkContext 能力