C# .Net 5中的ClaimsPrincipal.HttpContext

C# .Net 5中的ClaimsPrincipal.HttpContext,c#,asp.net,.net-5,C#,Asp.net,.net 5,我试图在单元测试(使用.net 5预览)中模拟IPrinciple(因为我有一个控制器操作,它使用了User.Identity.Name,我想为其编写单元测试)。参考中的答案,我在单元测试中有以下内容 var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, userName), }, "mock")); user

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

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

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

最终解决了这个问题,把答案留给可能面临类似情况的任何人

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

var user=new ClaimsPrincipal(新索赔实体)(新索赔[]
{
新索赔(ClaimTypes.Name、用户名),
}(“模拟”);
userController.ControllerContext.HttpContext=new DefaultHttpContext(){User=User};
这确保了控制器可以使用

var userName=User.Identity.Name;

最终解决了这个问题,把答案留给可能面临类似情况的任何人

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

var user=new ClaimsPrincipal(新索赔实体)(新索赔[]
{
新索赔(ClaimTypes.Name、用户名),
}(“模拟”);
userController.ControllerContext.HttpContext=new DefaultHttpContext(){User=User};
这确保了控制器可以使用

var userName=User.Identity.Name;