如何在 ASP .NET Core 2.1 中将登录页面设为默认路由?
Posted
技术标签:
【中文标题】如何在 ASP .NET Core 2.1 中将登录页面设为默认路由?【英文标题】:How to make Login page as a default route in ASP .NET Core 2.1? 【发布时间】:2019-01-01 12:52:25 【问题描述】:我是 ASP .NET Core 2.1 的初学者,正在开发使用 ASP .NET Core 2.1 和个人身份验证的项目。我想让我的登录页面作为我的默认路由而不是主页/索引:
routes.MapRoute(
name: "default",
template: "controller=Home/action=Index/id?");
任何帮助我如何将其更改为 ASP .NET Core 2.1,因为登录现在用作剃须刀页面而不是 MVC 操作视图。
【问题讨论】:
好吧,如果您将 [Authorize] 放在主页/索引控制器的顶部,它会在尝试访问主页时重新路由到您的登录页面 @DarthTommy 如果没有家庭控制器怎么办? 您提供的@numbtongue 链接与路由无关。 【参考方案1】:在 ConfigureServices 方法中使用它。
services.AddMvc().AddRazorPagesOptions(options=>
options.Conventions.AddAreaPageRoute("Identity", "/Account/Login","");
).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
然后在配置方法
app.UseMvc(routes =>
routes.MapRoute(
name: "default",
template: "controller=Home/action=Index/id?");
);
【讨论】:
我已经在我的网站上测试过了,它工作正常。 那么还有比这更多的变化吗? 啊。是的。我的网络应用中没有 index.cshtml 页面。 是的,一旦您删除了 Index.cshtml 文件,它就会像冠军一样工作。在删除之前无法覆盖默认值。【参考方案2】:我通过在ConfigureServices
函数 (Startup.cs) 中使用此代码来解决此问题
services.AddMvc().AddRazorPagesOptions(options =>
options.Conventions.AddAreaPageRoute("Identity", "/Account/Login", "/Account/Login");
).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
【讨论】:
这对我也有用,除了我想要 website.com/login 或 website.com/logout options.Conventions.AddAreaPageRoute("Identity", "/Account/Login", "/Login" ); options.Conventions.AddAreaPageRoute("Identity", "/Account/Logout", "/Logout");【参考方案3】:这可能会有所帮助,我不需要自己更改默认页面
https://exceptionnotfound.net/setting-a-custom-default-page-in-asp-net-core-razor-pages/
【讨论】:
【参考方案4】:只需在您的配置中使用它。这会将 AuthorizeAttribute 添加到您的页面
services.AddMvc()
.AddRazorPagesOptions(options =>
options.Conventions.AuthorizePage("/Home/Index");
);
或者像这样更改默认路由:
services.AddMvc().AddRazorPagesOptions(options =>
options.Conventions.AddPageRoute("/Employees/Index", "");
);
如有必要,请参阅此页面:https://docs.microsoft.com/en-us/aspnet/core/security/authorization/razor-pages-authorization?view=aspnetcore-2.1
【讨论】:
【参考方案5】:将此代码插入 Startup.cs 中的 ConfigureServices()
services.AddMvc().AddRazorPagesOptions(options =>
//Registering 'Page','route-name'
options.Conventions.AddPageRoute("/Account/Login", "");
);
记得删除“/Account/Login”操作声明中的任何路由名称
【讨论】:
【参考方案6】:经过一段时间我解决了它。需要为 AREAS 添加 ALLOW =>
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddRazorPagesOptions(options =>
options.AllowAreas = true; //--working after add this line
options.Conventions.AddAreaPageRoute("Identity", "/Account/Login", "");
);
【讨论】:
【参考方案7】:添加授权策略,使应用程序默认要求用户对abc文件夹下的页面进行身份验证,并且不要求abc文件夹下的某些公共页面。
services.AddRazorPages().AddRazorPagesOptions(options =>
options.Conventions.AuthorizePage("/abc");
options.Conventions.AllowAnonymousToPage("/abc/PublicPage");
);
【讨论】:
以上是关于如何在 ASP .NET Core 2.1 中将登录页面设为默认路由?的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET Core 2.1 中将 json 数据列表传递给 HttpPost 控制器
如何在 ASP.NET Core 中将角色添加到 Windows 身份验证
在 ASP.net Core MVC 2.1 中创建文本文件并下载而不保存在服务器上