using Microsoft.AspNetCore.Http; using System.Dynamic; public class RequestInfo : DynamicObject { private readonly IHttpContextAccessor _httpContextAccessor; private readonly ExpandoObject _data = new ExpandoObject(); 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) { string 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} 参数"); } } } }