我刚刚在ASP.NET Core中开始了我的第一个项目,并且我从.Net框架进行了迁移。
我使用ASP.NET Core 2.1创建了一个新项目,并通过
添加了IdentityRight click on project -> Add -> Add scaffolded items
到我的项目。
首先让我感到困惑。所有用于标识的文件都移动到一个名为“身份和管理”部分的区域,该文件已移动到“帐户”文件夹。最重要的是我没有帐户和管理控制器
我创建了一个名为BaseController
的新空控制器:
public class BaseController : Controller
{
private ApplicationDbContext _db { get; set; }
public BaseController(ApplicationDbContext db)
{
_db = db;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (HttpContext.User.Identity.IsAuthenticated)
{
string userEmail = User.Identity.Name;
ViewBag.CurrentUser = _db.Users.Where(u => u.Email.Equals(userEmail)).FirstOrDefault();
}
base.OnActionExecuting(filterContext);
}
}
在此控制器中,我获得了登录用户,并将其传递给ViewBag,并在我的视图中显示它。
我有一个HomeController
继承自BaseController
:
public class HomeController : BaseController
{
private UserManager<ApplicationUser> _userManager { get; set; }
private readonly ApplicationDbContext _db;
public HomeController(UserManager<ApplicationUser> userManager,
ApplicationDbContext db) : base (db)
{
_userManager = userManager;
_db = db;
}
public IActionResult Index()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
这部分代码可以正常工作,但是当我尝试导航到Manage/Index
或Manage/ChangePassword
时,出现此错误,并且我不知道如何解决此问题。导致此错误的原因是ViewBag为空,因为基本控制器操作从不运行。
对不起,如果我的问题很简单而且不专业
答案 0 :(得分:0)
在asp.net core 2.1中,脚手架标识使用Razor Pages而不是MVC结构,因此Identity
区域中没有控制器,您不能继承控制器。请参阅here。
由于它位于区域内,因此您需要使用https://localhost:44367/Identity/Account/Manage/Index
或https://localhost:44367/Identity/Account/Manage/ChangePassword
之类的URL来访问Razor页面。
此外,Razor Pages不支持ViewBag
,您可以改用ViewData
,请参考here。
要为“剃刀页面”添加过滤器,可以参考Filters in Razor Pages
public class BasePageModel : PageModel
{
public override void OnPageHandlerExecuting(PageHandlerExecutingContext context)
{
//...
}
}
public class IndexModel : BasePageModel
{
public void OnGet()
{
//...
}
}