如何在ASP.NET Core MVC 2应用中将登录页设为起始页?
解决ASP.NET Core MVC 2.0默认启动页跳转到Account/Login的问题
嘿,我来帮你搞定这个问题!你修改了默认路由但没生效,大概率是这几个关键点没处理到,咱们一步步来排查:
1. 检查launchSettings.json启动配置
Visual Studio的启动配置文件会优先指定启动URL,这会直接覆盖你在路由里的设置。你需要找到项目根目录下的Properties/launchSettings.json,查看里面的launchUrl项:
"profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "launchUrl": "home/index", // 就是这个配置在干扰你的路由! "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } }
把launchUrl的值改成account/login,或者直接删掉这个配置项,这样你的路由设置才会真正生效。
2. 确认中间件的执行顺序
ASP.NET Core的中间件执行顺序非常关键,UseMvc必须放在正确的位置。确保你的Configure方法里中间件顺序是这样的:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); // 如果用到了身份验证,必须在UseMvc之前添加 app.UseAuthentication(); // 这里放置你的路由配置 app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Account}/{action=Login}/{id?}"); }); }
如果UseMvc放在了UseAuthentication之前,可能会导致身份验证相关的跳转逻辑干扰你的默认路由设置。
3. 排查全局授权或重定向逻辑
如果你在Startup里配置了全局[Authorize]过滤器,或者HomeController的Index方法有特殊重定向逻辑,也可能导致页面跳转到主页:
- 检查
ConfigureServices里是否添加了全局授权:
services.AddMvc(options => { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); options.Filters.Add(new AuthorizeFilter(policy)); });
如果有这种全局授权,未登录用户访问任何页面都会跳转到登录页,但要确保登录路径在身份验证配置里正确设置:
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme) .AddCookie(options => { options.LoginPath = "/Account/Login"; });
另外,如果你的Account控制器的Login方法没有添加[AllowAnonymous]属性(在全局授权场景下),也会导致无法正常访问登录页。
4. 直接测试路由有效性
可以先在浏览器地址栏手动输入/Account/Login,看看能不能正常访问:
- 如果能访问,说明问题出在启动URL配置上;
- 如果不能访问,要检查Account控制器的Login方法是否存在,以及是否有正确的访问权限。
按照上面的步骤排查,应该就能解决你的问题啦!
内容的提问来源于stack exchange,提问作者Manav
相关产品推荐
相关产品推荐

