我正在使用ASP.NET Identity 项目在一个空的 MVC 实体框架中工作,试图为处理所有用户相关操作的IdentityController
完成Register
方法。
问题是,在创建用户后尝试使用该方法登录时SignInAsync
系统找不到使用该方法的引用。
因此,在以下代码片段上...:
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using System.Web.Mvc;
using WebApplication.Models;
namespace WebApplication.Controllers
{
public class IdentityController : Controller
{
UserManager<IdentityUser> UserManager = new UserManager<IdentityUser>(new UserStore<IdentityUser>(new WebApplicationIdentityDbContext()));
RoleManager<IdentityRole> RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new WebApplicationIdentityDbContext()));
public ActionResult Index()
{
return View();
}
public ActionResult Register()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel credential)
{
if (ModelState.IsValid)
{
if ((await UserManager.CreateAsync(new IdentityUser { UserName = credential.Name }, credential.Password)).Succeeded)
{
await SignInAsync(User, false);
return RedirectToAction("Index", "StartupController");
}
}
return View();
}
}
}
。缺少什么?
那是因为它不是一个框架方法。这只是团队添加到生成的AccountController
中的东西。这是我AccountController
的代码.我修改了一下我的,但我认为这就是原版的样子:
private async Task SignInAsync(User user, bool isPersistent)
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
}