在 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