我在应用程序中使用Windows身份验证,并且数据库中有一个UserInfo
表来存储有关用户的信息。我将此表的UserId
保留在用户的会话中。处理Session及其扩展方法会导致单元测试出现问题,因此我想在Controller Actions中停止使用它。
我尝试从会话中读取它,并将其添加到过滤器的“请求标头”中:
public void OnActionExecuting(ActionExecutingContext context)
{
Controller controller = (Controller)context.Controller;
context.HttpContext.Request.Headers.Add("userId", context.HttpContext.Session.GetString("UserId"));
}
然后使用[FromHeader]
在需要它的操作中获取值:
[HttpGet]
public async Task<IActionResult> MyAction(Guid? id, [FromHeader]string userId)
{
}
但是问题是userId
参数在这里始终是null
。不过,如果我检查userId
,则在调试时可以看到HttpContext.Request.Headers.Unknown
的值。