using System.Security.Claims; namespace Library.Extensions { public static class HttpContextExtension { // 회원 ID 조회 public static int GetMemberID(this HttpContext context) { return int.TryParse(context.User.FindFirst(ClaimTypes.NameIdentifier)?.Value, out var id) ? id : 0; } // 회원 이름 조회 public static string? UserName(this HttpContext context) => context.User.Identity?.Name; // 이전 요청 URL 조회 public static string? GetReferer(this HttpContext context) { if (context.Request.Headers.TryGetValue("Referer", out var referer) && !string.IsNullOrWhiteSpace(referer)) { return referer.ToString(); } return null; } // Client IP 조회 public static string? GetClientIP(this HttpContext context) { var forwardedFor = context.Request.Headers["X-Forwarded-For"].FirstOrDefault(); if (!string.IsNullOrWhiteSpace(forwardedFor)) { return forwardedFor; } return context.Connection.RemoteIpAddress?.ToString(); } // User-agent 조회 public static string? GetUserAgent(this HttpContext context) { if (context.Request.Headers.TryGetValue("User-Agent", out var userAgent) && !string.IsNullOrWhiteSpace(userAgent)) { return userAgent.ToString(); } return null; } // 상관관계 ID 조회 public static string GetCorrelationID(this HttpContext context) => context.TraceIdentifier; } }