如何使用Razor Pages设置垂直切片架构并自定义页面目录?
修改Razor Pages默认页面查找目录结构
默认情况下,ASP.NET Core的Razor Pages运行时会在根目录的Pages文件夹中查找页面文件,默认目录结构如下:
Pages --Orders ----index.cshtml ----add.cshtml --Products ----index.cshtml ----add.cshtml
现在需要调整为以下目录结构,将每个模块的页面文件放在各自模块目录下的Pages子文件夹中:
Orders --Pages ----index.cshtml ----add.cshtml Products --Pages ----index.cshtml ----add.cshtml
实现方法
1. 配置自定义页面查找路径
在项目的Program.cs(.NET 6+)或Startup.cs(.NET 5及更早版本)中,修改Razor Pages的服务配置,添加自定义的页面根路径和路由规则:
以Program.cs为例:
var builder = WebApplication.CreateBuilder(args); // 配置Razor Pages服务,添加自定义页面查找规则 builder.Services.AddRazorPages(options => { // 将根目录设为项目根路径,而非默认的/Pages options.RootDirectory = "/"; // 为Orders模块配置路由映射:将/Orders/Pages下的页面路由调整为/Orders/xxx options.Conventions.AddPageRouteModelConvention("/Orders/Pages/{page}", model => { model.RouteValues["page"] = $"Orders/{model.RouteValues["page"]}"; }); // 为Products模块配置路由映射:将/Products/Pages下的页面路由调整为/Products/xxx options.Conventions.AddPageRouteModelConvention("/Products/Pages/{page}", model => { model.RouteValues["page"] = $"Products/{model.RouteValues["page"]}"; }); }); var app = builder.Build(); // 常规中间件配置 if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); // 映射Razor Pages端点 app.MapRazorPages(); app.Run();
2. 页面路由的补充设置(可选)
如果不想通过全局配置统一处理路由,也可以在每个页面的.cshtml文件顶部通过@page指令直接指定路由:
比如Orders/Pages/index.cshtml:
@page "/Orders" @model Orders.Pages.IndexModel <h1>订单列表</h1>
Orders/Pages/add.cshtml:
@page "/Orders/Add" @model Orders.Pages.AddModel <h1>添加订单</h1>
这种方式更灵活,适合需要自定义特殊路由的页面。
3. 验证配置效果
启动项目后,访问/Orders应能正常加载Orders/Pages/index.cshtml,访问/Products/Add应能加载Products/Pages/add.cshtml,说明配置已生效。
内容的提问来源于stack exchange,提问作者acmoune
相关产品推荐
相关产品推荐

