在Filter中添加标题值以用作Controller中的Action参数

时间:2018-07-12 18:32:28

标签: c# asp.net-core asp.net-core-mvc

我在应用程序中使用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的值。

0 个答案:

没有答案