using System.Dynamic; namespace NewPdaSqlServer.entity.Base; public class RequestInfo : DynamicObject { private readonly ExpandoObject _data = new(); private readonly IHttpContextAccessor _httpContextAccessor; public RequestInfo(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; InitializeData(); } private void InitializeData() { // 初始化所有需要的请求头参数 SetValue("OrgId", GetHeaderValue("OrgId")); //// 可以继续添加其他参数 //SetValue("UserId", GetHeaderValue("UserId")); //SetValue("Language", GetHeaderValue("Language")); } public override bool TryGetMember(GetMemberBinder binder, out object result) { var name = binder.Name; return ((IDictionary)_data).TryGetValue(name, out result); } public override bool TrySetMember(SetMemberBinder binder, object value) { ((IDictionary)_data)[binder.Name] = value; return true; } public string GetHeaderValue(string key) { var httpContext = _httpContextAccessor.HttpContext; if (httpContext?.Request.Headers.TryGetValue(key, out var value) == true) return value.ToString(); return null; } private void SetValue(string key, object value) { ((IDictionary)_data)[key] = value; } // 添加一个方法来检查必需参数是否存在 public void ValidateRequired(params string[] requiredFields) { foreach (var field in requiredFields) if (!((IDictionary)_data).ContainsKey(field) || ((IDictionary)_data)[field] == null) throw new ArgumentException($"请求头中缺少必需的 {field} 参数"); } }