我想测试用户身份设置的Web服务调用(假装用户已登录)
我查了很多帖子和stackoverflow的答案,但我没有得到我想要的答案。
我最接近的是这个。
var context = new Mock<HttpContextBase>();
var mockIdentity = new Mock<IIdentity>();
context.SetupGet(x => x.User.Identity).Returns(mockIdentity.Object);
mockIdentity.Setup(x => x.Name).Returns("abc");
此时,我认为我必须设置controllercontext,并且需要以某种方式提供上下文变量。
我见过很多关于MVC控制器的例子,但我找不到适用于ApiController的例子。有人可以对此有所了解吗?
谢谢!
答案 0 :(得分:4)
这就是我为我的项目所做的事情: 对于ASP.NET Web Api
this._userController.User = new ClaimsPrincipal(
new ClaimsIdentity(
new List<Claim>
{
new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", "1234"),
new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", "Test@test.com"),
new Claim("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name", "live.com#Test@test.com")
})
);
这是针对.net core web api:
var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
{
new Claim(ClaimTypes.NameIdentifier, "testId"),
new Claim(ClaimTypes.Name, "testName")
}));
this.controller.ControllerContext = new Microsoft.AspNetCore.Mvc.ControllerContext()
{
HttpContext = new DefaultHttpContext() { User = user }
};
让我知道它是否有帮助。
答案 1 :(得分:1)
Awww,这很简单。
var identity = new GenericIdentity("bcd");
Controller.User = new GenericPrincipal(identity, null);
原来这部分并不需要模拟用户,你只需要设置你正在呼叫的控制器的用户ID。