.NET Core 6 Web应用中Razor Pages与控制器能否共存及配置方法?
在.NET Core 6 Razor Pages项目中启用控制器
完全可以在同一个.NET Core 6 Razor Pages项目中同时使用MVC控制器和Razor Pages,你遇到的访问失败问题,是因为默认创建的Razor Pages项目没有启用控制器路由支持,只需要简单配置即可解决。
配置步骤
1. 修改Program.cs启用控制器服务和路由
默认的Razor Pages项目只注册了Razor Pages相关服务,需要添加控制器服务注册,并在中间件中映射控制器路由:
var builder = WebApplication.CreateBuilder(args); // 同时注册Razor Pages和MVC控制器服务 builder.Services.AddRazorPages(); builder.Services.AddControllers(); // 新增此行,添加控制器服务 var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 映射控制器路由和Razor Pages路由(顺序不强制,但都要添加) app.MapControllers(); // 新增此行,启用控制器路由 app.MapRazorPages(); app.Run();
2. 创建符合规范的控制器
确保你的控制器类满足以下要求:
- 类名以
Controller结尾(比如TestController) - 继承自
Controller或ControllerBase(需要返回视图用Controller,仅返回数据用ControllerBase) - 示例控制器代码:
using Microsoft.AspNetCore.Mvc; namespace YourProjectNamespace.Controllers; public class TestController : Controller { // 默认访问路径:/Test 或 /Test/Index public IActionResult Index() { // 返回文本内容,也可以返回视图(需创建Views/Test/Index.cshtml) return Content("Test控制器的Index方法"); } // 访问路径:/Test/Hello public IActionResult Hello() { return Content("Hello from Test Controller"); } }
3. 路由规则说明
- 默认路由遵循
/{控制器名(去掉Controller后缀)}/{动作名},比如TestController的Index方法对应/Test或/Test/Index - 可以通过
[Route]特性自定义路由,比如:
[Route("my-test")] public class TestController : Controller { [Route("say-hi")] public IActionResult Hello() { return Content("自定义路由访问成功"); } }
此时访问/my-test/say-hi即可触发该方法。
内容的提问来源于stack exchange,提问作者MTplus
相关产品推荐
相关产品推荐

