繁体   English   中英

ASP.NET Core 6 MVC中如何使用区域登录

[英]How to use an area for login in ASP.NET Core 6 MVC

我使用默认方法创建一个区域。 右键单击项目并添加一个新的脚手架项目。 选择区域,给它命名并创建文件夹结构。

我的区域称为Login 我创建了一个名为AccountController的 controller(在Areas/Login/Controllers文件夹中),其中包含一个名为Login的方法,该方法只return view(); .

在我的HomeController中,我添加了一个[Authorize]属性,唯一的操作是默认索引。

我有我的路线设置:

app.UseEndpoints(endpoints => {
    endpoints.MapControllerRoute(name: "login",
              pattern: "{area:exists}/{controller=Account}/{action=Login}/{id?}");
    endpoints.MapControllerRoute(name: "default",
              pattern: "{controller=Home}/{action=Index}/{id?}"); 
});

我用一个断点进行了测试,我正确地点击了区域内的 AccountController > Login 操作,但是当它返回视图时它没有找到视图Areas/Login/Views/Account/Login.cshtml

它实际上是在主站点中查找。 如果我在主站点的Views/Shared文件夹中添加一个Login.cshtml文件,它将加载它。

我觉得我在program.cs文件中的某处缺少配置步骤,但我不知道它会是什么。 就像身份不在正确的位置,或者我必须指定它在一个区域中。 帮帮我,欧比万。

我自己想出来了。 这就是使用我自己的自定义控制器/路径/视图而不是使用内置于神奇身份页面的 asp.net 核心创建身份重定向到区域的方法。

  1. 在 program.cs 中添加一个端点到 map 路由。

     endpoints.MapAreaControllerRoute( name: "Buffoon", areaName: "Buffoon", pattern: "Buffoon/{controller=Account}/{action=Login}");
  2. 在您的代码中创建区域; 在Website上右击,select Add > New Scaffolded item,Select Area,输入Area Name。

  3. 添加您的 controller 并在该区域查看以匹配您的路线默认值。

  4. 使用[Area("Area_Name")]在您的区域内标记您的 controller 。 在我上面的例子中,我会使用[Area("Buffoon")]

  5. 在 program.cs 文件的构建器配置区域中,在应用程序 cookie 中设置登录路径变量。 使用我上面的例子;

builder.Services.ConfigureApplicationCookie(cke => { cke.LoginPath = "/Buffoon/Account/Login"; });

  1. 将您的身份添加到构建器配置区域。 我正在使用带有实体框架的 Sql 服务器,所以这是我之前已经配置的示例。 User是从IdentityUser继承的自定义 class,而MyDbContext是我从IdentityDbContext<User>继承的自定义 EF 上下文)。

builder.Services.AddIdentity<User, IdentityRole>(cfg => { cfg.User.RequireUniqueEmail = true; }).AddEntityFrameworkStores<MyDbContext>();

  1. 确保您已添加app.UseAuthentication(); app.UseAuthorization(); 到 program.cs 文件的应用程序配置部分。

  2. 最后,我在我的默认路由 home controller 上放置了一个[Authorize]属性,点击它后,重定向发生在我新创建的区域并显示我的登录视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM