ClaimsPrincipal.HttpContext 在 .Net 5 中
ClaimsPrincipal.HttpContext in .Net 5
我试图在我的单元测试(使用 .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(new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, userName),
}, "mock"));
userController.ControllerContext.HttpContext = new DefaultHttpContext() { User = user };
这确保了控制器可以通过
接收用户名
var userName = User.Identity.Name;
我试图在我的单元测试(使用 .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(new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.Name, userName),
}, "mock"));
userController.ControllerContext.HttpContext = new DefaultHttpContext() { User = user };
这确保了控制器可以通过
接收用户名var userName = User.Identity.Name;