把“Razor Pages”框架所需的所有服务**(路由、模型绑定、验证、缓存、授权等)一次性注册到 ASP.NET Core 的依赖注入容器,让你的
.cshtml
页面真正能跑起来。**-
它到底干了啥(内部流程)
表格
注册的服务 | 作用 |
---|---|
RazorPagesOptions |
配置根目录、约定、过滤器 |
IRazorPageFactoryProvider |
把 .cshtml 编译成可执行类型 |
IPageHandlerMethodSelector |
挑哪个 OnGet/OnPost 方法 |
IPageModelActivatorProvider |
实例化 PageModel |
ModelMetadataProvider + 验证 |
绑定 & 校验你的 BindProperty |
授权、缓存、 antiforgery | 配套中间件就绪 |
一句话:你写个
Index.cshtml
+ Index.cshtml.cs
,全靠这些幕后服务才能被访问、绑定、验证、渲染。-
最小启动示例
csharp
var builder = WebApplication.CreateBuilder(args);builder.Services.AddRazorPages(); // ← 关键一行var app = builder.Build();app.MapRazorPages(); // 注册路由
app.Run();
目录结构:
/PagesIndex.cshtmlIndex.cshtml.cs
-
常用配置链
csharp
builder.Services.AddRazorPages(options =>
{options.RootDirectory = "/Features"; // 改根目录options.Conventions.AddFolderApplicationModelConvention("/Admin", model => model.Filters.Add(new AuthorizeFilter()));
});
-
与 MVC 的区别
表格
特点 | Razor Pages | MVC |
---|---|---|
URL→文件 | 默认一一对应(/Privacy →Privacy.cshtml ) |
自定义路由 |
控制器 | PageModel 合并到页面 | 独立 Controller |
学习曲线 | 轻量、无控制器概念 | 更灵活、分层清晰 |
-
一句话总结
AddRazorPages()
就是:
“把 Razor Pages 所需的编译、路由、模型绑定、验证、授权等全套服务一次性塞进 DI 容器,让你的.cshtml
+ PageModel 真正能被访问和渲染。”