我正在开发我的第一个项目,即基于 ASP.NET Core 6 MVC 和默认身份 Razor 页面的应用程序。我正在开发 .NET 6 并使用 EF Core 6。该应用程序是一个客户管理系统,仅供内部使用。
我已经实现了脚手架身份,通过其路径访问时它可以正常工作:
/Identity/Account/Login
但问题是:
如何在欢迎/主页上显示登录表单,保护除登录表单之外的所有其他内容免受未经授权的访问?我的意思是输入:mydomain.com
的用户应该只看到登录/注册页面。
即:当我将
[Authorize]
属性放在 HomeController
上时,它不会将我重定向到登录页面,我只是收到 http 404 错误。那么这是授权问题、路由问题还是只是 HTML 布局问题?
我翻遍了很多帖子,但找不到答案。也许我误解了这个问题?
问候, 克里斯托
您可以像这样设置默认值: 在startup.cs中
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Account}/{action=Login }/{id?}");
);
}
在启动文件中添加以下代码,这将帮助您将 mydomain.com 导航到登录页面。
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages(options =>
{
options.Conventions.AddPageRoute("/Identity/Account/Login", "");
});
});
如果您想保护所有其他内容,您可以在全局级别使用
[Authorize]
属性。
services.AddAuthorization(options =>
{
options.FallbackPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
});
您必须允许用户访问登录或注册页面,在 PageModel 类中添加
[AllowAnonymous]
属性。
关于 404 错误,系统似乎不知道将未经授权的用户重定向到哪里。通过使用以下代码,它将未经授权的用户重定向到登录页面。
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = "/Identity/Account/Login";
});