如何在 ASP.NET CORE 5.0 MVC 中将登录设置为默认路由

Posted

技术标签:

【中文标题】如何在 ASP.NET CORE 5.0 MVC 中将登录设置为默认路由【英文标题】:How to make Login as Default route in ASP.NET CORE 5.0 MVC 【发布时间】:2021-03-25 12:30:43 【问题描述】:

我试图在加载应用程序时在第一次启动时加载登录页面。 到目前为止我尝试了什么

配置

app.UseEndpoints(endpoints =>
            
                endpoints.MapControllerRoute(
                    name: "default",
                    //pattern: "area=Manager/controller=Ticket/action=Index/id?");
                    pattern: "area=Manager/controller=Home/action=Index/id?");
                endpoints.MapRazorPages();
            );

配置服务

services.AddMvc().AddRazorPagesOptions(options => 
                options.Conventions.AddAreaPageRoute("Identity", "/Account/Login", "");
            ).SetCompatibilityVersion(CompatibilityVersion.Version_3_0);

此方法工作正常,但用户单击登录按钮后没有任何反应。再次加载中的登录页面。 到目前为止,我在这里检查了几个帖子,但无论我检查什么,都将其发送到 .NET CORE 2.0CORE 2.1 知道这里有什么问题吗?

【问题讨论】:

Configure 方法中,在app.UseEndpoint 中,您可以通过模式指定默认页面是什么。在您的情况下,您将模式设置为area=Manager/controller=Home/action=Index/id?。这是对 URL 的反映。例如:localhost/user/account/get 区域将是user,控制器将是AccountController,并且在所述控制器内部正在执行的方法是get。现在如果你只是去localhost默认控制器,方法、区域等都是基于模式controller=Home执行的。将 Home 更改为您的登录控制器 @Lith 像 pattern: "area=Identity/controller=Account/action=Login/id?"); 这样添加 app.UseEndPoint 是行不通的 您的Login 方法是否返回视图?操作Login 听起来更像是一种在实际验证用户插入的登录数据而不是获取登录页面时使用的方法。 是的,它返回View。我使用ASP.NET CORE MVC Identity,默认添加为RazorPages。我希望在第一个应用程序加载登录页面中不显示主页或其他任何内容 因此,只要 URL 像 localhost 这样简单,您就希望加载登录页面,以便用户必须填写数据,类似于 facebook 所做的或做过的事情,对吧?在这种情况下,在ConfigureServices 中尝试services.AddMvc().AddRazorPagesOptions(options => options.Conventions.AddPageRoute("/Account/Login", ""); );,或根据您的情况执行控制器和操作。在exceptionnotfound.net/… 找到信息可以提供帮助。 【参考方案1】:

默认路由应该将人们重定向到一个公共页面(如 index.* 或 start.* 等),用户可以从中导航并做他们的事情。

为此设置登录页面对我来说似乎是错误的,因为您不能在那里做任何其他事情,只能登录和验证。

您说过,您希望始终在其他任何事情发生之前显示登录页面,那么我猜您的应用程序是完全安全的,如果没有有效的登录,则没有任何操作或功能可用。

如果是这种情况,那么只需在每个页面上都需要一个授权,然后自动将您重定向到您的登录屏幕。您可以为此使用 [Authorize] 属性,甚至可以在 Configure 方法中全局配置它: endpoints.MapRazorPages().RequireAuthorization();

提示:还没有检查它是否有效,一些针对“asp.net mvc 全局授权”的搜索可能会有所帮助

【讨论】:

我明白重定向为什么我想在第一次加载时加载。我的应用程序需要安全,Users 在登录前不能做任何事情。我已经在每个 Controller 操作中设置了Authorize,但情况并非如此。我希望登录作为默认页面加载,仅此而已。我尝试了几种方法,但不幸的是没有任何效果,这就是我问的原因。设置endpoints.MapRazorPages().RequireAuthorization(); 不是我的解决方案!【参考方案2】:

这个解决方案对我有用

配置服务

 services.AddMvc().AddRazorPagesOptions(options => 
                options.Conventions.AddAreaPageRoute("Identity", "/Account/Login", "");
            );

配置

app.UseEndpoints(endpoints =>
            
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "area=Manager/controller=Home/action=Index/id?");
                endpoints.MapRazorPages().RequireAuthorization();
            );

【讨论】:

以上是关于如何在 ASP.NET CORE 5.0 MVC 中将登录设置为默认路由的主要内容,如果未能解决你的问题,请参考以下文章

如何确定在 C# ASP.NET CORE MVC 5.0 中选择了哪个单选按钮

通过 ASP.NET Core 3.1/5.0 MVC 中的脚本使用选定的 ''value='' 填充数据库

使用 FFMPEG 的 ASP.NET Core 5.0 MVC HLS 转码

从 Azure 中托管的 ASP.NET Core 5.0 MVC 站点调用 API/服务的间歇性套接字异常

如何按照存储库模式在 Asp.Net Core 5.0 项目上实现 .Net Core Identity?

.NET Core简介