请求 Session (IRequestSession)
IRequestSession 封装了从 HttpContext 解析请求上下文信息的逻辑,默认实现为 DefaultRequestSession。
能力范围
| 成员 | 说明 |
|---|---|
ClientIp |
自动解析 X-Forwarded-For、cf-visitor、REMOTE_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 能力。