在 asp.net 核心中测试控制器时处理声明
Handle Claims while testing controller in asp.net core
在 asp.net 核心工作,有几个控制器有声明。示例代码是这样的
[HttpGet, Route("GetCustomerList")]
public ActionResult<GenericResponse> Get()
{
var claims = User as ClaimsPrincipal;
string username = claims.Claims.Where(c => c.Type == "UserName").Select(x => x.Value).FirstOrDefault();
string roleid = claims.Claims.Where(c => c.Type == "RoleId").Select(x => x.Value).FirstOrDefault();
........
........
}
在控制器测试时我应该如何处理这个声明?我已经尝试了 给出的解决方案,即第一个解决方案。但是,在我的控制器中,调试时给用户一个空值,然后它停止了。
您尝试在控制器中访问的用户在 HttpContext 上找到,因此您可以为被测控制器创建一个 DefaultHttpContext 并 link 根据以下示例为此 DefaultHttpContext 创建一个 ClaimsPrincipal:
var fakeClaims = new List<Claim>()
{
new Claim(ClaimTypes.Name, "name"),
new Claim("RoleId", "1"),
new Claim("UserName", "John")
};
var fakeIdentity = new ClaimsIdentity(fakeClaims, "TestAuthType");
var fakeClaimsPrincipal = new ClaimsPrincipal(fakeIdentity);
ControllerToTest controller = new ControllerToTest();
ControllerToTest.ControllerContext.HttpContext = new DefaultHttpContext
{
User = fakeClaimsPrincipal
};
ControllerToTest.Get();
您还可以根据
模拟 HttpContext
在 asp.net 核心工作,有几个控制器有声明。示例代码是这样的
[HttpGet, Route("GetCustomerList")]
public ActionResult<GenericResponse> Get()
{
var claims = User as ClaimsPrincipal;
string username = claims.Claims.Where(c => c.Type == "UserName").Select(x => x.Value).FirstOrDefault();
string roleid = claims.Claims.Where(c => c.Type == "RoleId").Select(x => x.Value).FirstOrDefault();
........
........
}
在控制器测试时我应该如何处理这个声明?我已经尝试了
您尝试在控制器中访问的用户在 HttpContext 上找到,因此您可以为被测控制器创建一个 DefaultHttpContext 并 link 根据以下示例为此 DefaultHttpContext 创建一个 ClaimsPrincipal:
var fakeClaims = new List<Claim>()
{
new Claim(ClaimTypes.Name, "name"),
new Claim("RoleId", "1"),
new Claim("UserName", "John")
};
var fakeIdentity = new ClaimsIdentity(fakeClaims, "TestAuthType");
var fakeClaimsPrincipal = new ClaimsPrincipal(fakeIdentity);
ControllerToTest controller = new ControllerToTest();
ControllerToTest.ControllerContext.HttpContext = new DefaultHttpContext
{
User = fakeClaimsPrincipal
};
ControllerToTest.Get();
您还可以根据