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<string, object>)_data).TryGetValue(name, out result);
|
}
|
|
public override bool TrySetMember(SetMemberBinder binder, object value)
|
{
|
((IDictionary<string, object>)_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<string, object>)_data)[key] = value;
|
}
|
|
// 添加一个方法来检查必需参数是否存在
|
public void ValidateRequired(params string[] requiredFields)
|
{
|
foreach (var field in requiredFields)
|
{
|
if (!((IDictionary<string, object>)_data).ContainsKey(field) ||
|
((IDictionary<string, object>)_data)[field] == null)
|
{
|
throw new ArgumentException($"请求头中缺少必需的 {field} 参数");
|
}
|
}
|
}
|
}
|