首页 > 解决方案 > .Net 5 中的 ClaimsPrincipal.HttpContext

问题描述

我试图User.Identity.Name在我的单元测试(使用 .net 5 预览版)中模拟 IPrinciple(因为我有一个使用的控制器操作,我想为其编写单元测试)。参考这个问题的答案,我的单元测试中有以下内容。

var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
{
    new Claim(ClaimTypes.Name, userName),
               
}, "mock"));
userController.ControllerContext = new ControllerContext()
{
                 
    HttpContext = new DefaultHttpContext() { User = user }
};

但是,我收到以下错误。

Reference to type 'HttpContextBase' claims it is defined in 'System.Web', but it could not be found

我在这里看到了一个类似的问题,但答案指向更改目标版本。我想知道是否有不改变目标版本的出路。

标签: c#asp.net.net-5

解决方案


终于设法解决了它,将答案留给可能面临类似情况的任何人。

ControllerContext我没有完全更换,而是更换了ControllerContext.HttpContext

var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
{
    new Claim(ClaimTypes.Name, userName),
               
}, "mock"));
userController.ControllerContext.HttpContext = new DefaultHttpContext() { User = user };

这确保了控制器可以接收用户名

var userName = User.Identity.Name;

推荐阅读