ClaimsPrincipal.HttpContext в. Net 5 - PullRequest
       35

ClaimsPrincipal.HttpContext в. Net 5

1 голос
/ 01 августа 2020

Я пытаюсь издеваться над IPrinciple (поскольку у меня было действие контроллера, которое использовало User.Identity.Name, для которого я хотел бы написать модульный тест) в моем модульном тесте (используя предварительный просмотр. net 5). Ссылаясь на ответ в на этот вопрос , в моем модульном тесте есть следующее.

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

Я видел аналогичный вопрос здесь , но ответ указывает на изменение целевой версии. Интересно, есть ли выход без смены целевой версии.

1 Ответ

0 голосов
/ 01 августа 2020

Наконец удалось решить эту проблему, оставив здесь ответ для всех, кто может столкнуться с подобной ситуацией.

Вместо полной замены ControllerContext я заменил ControllerContext.HttpContext

var user = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
{
    new Claim(ClaimTypes.Name, userName),
               
}, "mock"));
userController.ControllerContext.HttpContext = new DefaultHttpContext() { User = user };

Это гарантирует, что Контроллер может получить UserName с

var userName = User.Identity.Name;
...