如何在同一个ASP.NET Core项目中同时使用MVC与Razor Page?
ASP.NET Core Razor Pages项目集成MVC功能配置方案
1. 服务注册修正
ASP.NET Core 3.0及以上版本中,需要明确同时注册Razor Pages和MVC控制器+视图服务,修改Startup.cs(或.NET 6+的Program.cs)的服务注册逻辑:
- 保留原有Razor Pages的服务注册
- 新增MVC控制器与视图的服务注册,不要仅依赖过时的
services.AddMvc()配置
// 原有Razor Pages服务保留 services.AddRazorPages(); // 新增MVC控制器+视图支持 services.AddControllersWithViews();
2. 端点配置修正
中间件管道的端点配置中必须同时添加Razor Pages和MVC的路由映射,缺少MVC路由会直接导致控制器路径404:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // 原有中间件(异常处理、静态文件、路由、授权等)顺序保持不变 app.UseEndpoints(endpoints => { // 原有Razor Pages端点保留 endpoints.MapRazorPages(); // 新增MVC控制器路由映射 endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); }
如果使用.NET 6+ 顶层语句的Minimal API风格项目,上述服务注册和端点映射逻辑一致,对应添加到Program.cs即可。
3. 控制器与视图结构校验
- 控制器类必须放在
Controllers文件夹下,继承Controller基类,且类名以Controller为后缀,示例:
public class HomeController : Controller { public IActionResult Index() { return View(); } }
- 视图文件必须符合MVC路径约定:
Views/[控制器名称]/[动作名称].cshtml,上述Home控制器的Index动作对应的视图路径应为Views/Home/Index.cshtml,共享视图可放在Views/Shared目录下。
4. 路由冲突排查
- 相同路径下Razor Pages路由优先级高于MVC控制器路由,确认你访问的MVC路径没有被已有的Razor Pages页面占用。
- 按上述默认路由配置,访问
/[控制器名]/[动作名]即可触发对应MVC逻辑,比如上述示例访问/Home/Index即可返回对应视图。
内容的提问来源于stack exchange,提问作者fahime abouhamze
相关产品推荐
相关产品推荐

