User987 User987 - 1 month ago 9
ASP.NET (C#) Question

The name 'DefaultAuthenticationTypes' does not exist in the current context

I'm trying to implement role-based authorization in my web application like following:

[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);
}
}


I'm getting an error on two lines:

1.ClaimsIdentity identity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);


And:

2.AuthenticationManager.SignIn(identity);


The error 1:

the name 'DefaultAuthenticationTypes' does not exist in the current context


And error 2 is:

Authentication manager does not contains definition for SignIn


I was trying to find a solution how to implement this but I couldn't find anything related to the errors.

Answer

DefaultAuthenticationTypes is part of Identity framework and found in Microsoft.AspNet.Identity namespace.

To use it, add a using to the top of the file

using Microsoft.AspNet.Identity;
//...other code
identity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);

or call it directly

identity = new ClaimsIdentity(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);

The second issue was already dealt with in another one of your questions here