Blazor Server应用中是否可以使用类似MVC的Areas功能?
Blazor Server完全支持ASP.NET Core原生的Areas功能,和MVC项目中Areas的使用逻辑基本一致,完全可以用来做模块化的业务隔离。
核心使用步骤
- 目录结构创建:在项目根目录新建
Areas文件夹,每个业务模块对应Areas下的独立子目录,比如后台管理模块可以创建Areas/Admin目录,内部按照Blazor的常规目录结构,新建Pages、Shared、wwwroot(可选,放模块独立静态资源)等子目录即可。 - 路由注册配置:在
Program.cs中注册Blazor路由时,增加Area路由规则即可,示例配置如下:
// 注册Blazor Hub路由 app.MapBlazorHub(); // 为Admin区域配置独立的Fallback路由 app.MapFallbackToAreaPage("/Admin/{*clientRoute}", "~/Areas/Admin/Pages/_Host.cshtml", "Admin"); // 全局非Area路由的Fallback保留原有配置即可 app.MapFallbackToPage("/_Host");
- 组件路由声明:Area下的Blazor页面组件,只需要在
@page指令中增加对应Area的路由前缀即可,比如Admin模块的用户管理页面,路由可以声明为@page "/Admin/User/List",如果需要统一加前缀,也可以通过路由组配置实现,不需要每个组件单独写前缀。 - 跳转逻辑适配:在组件内跳转到Area页面时,直接调用
NavigationManager.NavigateTo("/Admin/User/List")即可,和普通页面跳转逻辑完全一致。
常见注意事项
- 不建议在同一个Area下混用MVC视图和Blazor组件,如果是纯Blazor的模块化拆分,Area下只保留
.razor组件、对应业务服务和静态资源即可,能最大程度避免路由冲突。 - 建议Area下的所有页面路由都加上对应模块的前缀,避免和根目录下的Blazor页面出现路由冲突。
- 如果需要每个Area使用独立的布局、认证规则,直接在对应Area的
_Host.cshtml和_Imports.razor中单独配置即可,不需要和全局配置共用。
内容的提问来源于stack exchange,提问作者Steven Gazo M.
相关产品推荐
相关产品推荐

