.NET Core 2.2升级至3.0后端点路由失效问题
ASP.NET Core 3.0升级后MVC端点无法访问问题解决
问题描述
将包含Razor Pages及MVC控制器的ASP.NET Core 2.2应用升级到3.0后,Razor Pages可正常运行,但访问MVC端点时,返回的是登录页面HTML而非预期的数据结构。在2.2版本中该功能正常,例如访问https://{mydomainname}/warhouse/orderlist原本能返回数据集,升级后会跳转至登录页。
原Startup.cs关键代码
app.UseRouting(); //Added for 3.0 app.UseSession(); app.UseAuthentication(); app.UseCookiePolicy(); // Removed 2.2 // app.UseMvc(routes => // { // routes.MapRoute( // name: "default", // template: "{controller=Home}/{action=Index}/{id?}"); // }); // Added for 3.0 app.UseEndpoints(endpoints => endpoints.MapRazorPages()); app.UseEndpoints(endpoints => endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"));
问题原因
ASP.NET Core 3.0的端点路由系统中,多次调用UseEndpoints会导致路由配置异常。后续的UseEndpoints调用可能覆盖或干扰之前的路由注册,导致MVC控制器的路由未被正确识别,请求无法匹配到对应的端点,最终跳转至默认的登录页面(通常是Home/Index,而该页面需要登录授权)。
解决方案
将两次UseEndpoints调用合并为一次,在同一个UseEndpoints委托中同时注册Razor Pages和MVC控制器路由:
app.UseRouting(); //Added for 3.0 app.UseSession(); app.UseAuthentication(); app.UseCookiePolicy(); // 合并端点路由配置 app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); // 若包含API控制器,需添加以下行: // endpoints.MapControllers(); });
说明
合并后的配置能确保Razor Pages和MVC控制器的路由规则都被正确加载,请求可准确匹配到对应的MVC端点,避免因路由匹配失败而跳转到登录页面。
内容的提问来源于stack exchange,提问作者JPicasso
相关产品推荐
相关产品推荐

