Имя DefaultAuthenticationTypes не существует в текущем контексте
Я пытаюсь реализовать авторизацию на основе ролей в своем веб-приложении следующим образом:
[HttpPost]
[ActionName("Login")]
public ActionResult Login(LoginViewModel model)
{
if (ModelState.IsValid)
{
string userName = model.Username;
string[] userRoles = (string[])Session["UserRoles"];
ClaimsIdentity identity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);
identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, userName));
userRoles.ToList().ForEach((role) => identity.AddClaim(new Claim(ClaimTypes.Role, role)));
identity.AddClaim(new Claim(ClaimTypes.Name, userName));
AuthenticationManager.SignIn(identity);
return RedirectToAction("Success");
}
else
{
return View("Login",model);
}
}
Я получаю сообщение об ошибке в двух строках:
1.ClaimsIdentity identity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);
А также:
2.AuthenticationManager.SignIn(identity);
Ошибка 1:
the name 'DefaultAuthenticationTypes' does not exist in the current context
И ошибка 2:
Authentication manager does not contains definition for SignIn
Я пытался найти решение, как реализовать это, но я не мог найти ничего, связанного с ошибками.
1 ответ
Решение
DefaultAuthenticationTypes
является частью структуры идентификации и находится в Microsoft.AspNet.Identity
Пространство имен.
Чтобы использовать его, добавьте using
в начало файла
using Microsoft.AspNet.Identity;
//...other code
identity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);
или позвоните прямо
identity = new ClaimsIdentity(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);
Второй вопрос уже был рассмотрен в другом из ваших вопросов здесь
Во-первых, это просто постоянная строка
Если вы не хотите устанавливать пакеты, самое быстрое (и не очень ортодоксальное) решение -
ClaimsIdentity identity = new ClaimsIdentity("ApplicationCookie");
вы можете увидеть определение здесь