- CMS
- 后端
- Web框架
【免费下载链接】OrchardCore
Orchard Core is an open-source modular and multi-tenant application framework built with ASP.NET Core, and a content management system (CMS) built on top of that framework.
导读
本指南基于 Orchard Core 官方文档《Creating a modular ASP.NET Core application》,手把手带你用dotnet new代码生成模板创建一套「Web 应用 + 模块」的最小可运行示例:Web 应用负责提供页面布局,模块负责注册路由并响应首页请求,两者通过 MVC 的 Area 机制天然解耦。读完本文你将掌握ocmvc与ocmodulemvc两个模板的完整使用流程、模块清单(Manifest)与StartupBase的工作原理、默认{area}/{controller}/{action}路由规则以及如何改写自定义路由,并能在 OrchardCore.Mvc.Web 与 OrchardCore.Mvc.HelloWorld 两个仓库示例中找到一一对应的源码证据。
你要构建什么
你将构建一个与 Orchard Core 自带示例 "Hello World" 应用类似的模块化 ASP.NET Core MVC 应用程序,由两部分组成:
- 一个 Web 应用:作为宿主项目,提供整体页面布局(Layout);
- 一个模块:注册路由并响应首页请求。
模块中的控制器、Action 与视图独立存在于模块项目内,而页面布局却来自 Web 应用项目——这正是 Orchard Core「模块化」的核心:职责分离、按需装配。
仓库中与本指南一一对应的参考项目为:
| 角色 | 仓库路径 |
|---|---|
| Web 应用宿主 | src/OrchardCore.Mvc.Web |
| Hello World 模块 | src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld |
环境准备
开始之前,你需要具备:
- 当前版本的 .NET SDK(可从 https://dotnet.microsoft.com/download 下载);
- 一个文本编辑器 + 一个可运行
dotnetCLI 命令的终端。
创建 Orchard Core 站点与模块
创建站点和模块有多种方式,官方模板文档见 Code Generation Templates。本文使用 Orchard Core 官方的代码生成模板(Code Generation Templates),其源码位于 src/Templates/OrchardCore.ProjectTemplates。
1. 安装模板
在终端中执行以下命令,安装最新稳定版模板:
dotnet new install OrchardCore.ProjectTemplates@3.0.1-*[!NOTE] 若想使用
main开发分支上的模板,请附加预览源:dotnet new install OrchardCore.ProjectTemplates@3.0.1-* --nuget-source https://nuget.cloudsmith.io/orchardcore/preview/v3/index.json
关于稳定版与开发分支版本的选择说明,可参考 templates 文档中的dotnet new install OrchardCore.ProjectTemplates@3.0.1与@3.0.1-*两种安装方式。
2. 创建空目录与 Web 应用
新建一个名为OrchardCore.Mvc的空文件夹存放所有项目,进入该目录后执行:
dotnet new ocmvc -n OrchardCore.Mvc.Webocmvc即 "Orchard Core Mvc Web App" 模板的短名称(shortName),其模板配置定义在 OrchardCore.Templates.Mvc.Web/.template.config.src/template.json。该模板还支持两个可选参数:
-f|--framework:目标框架,模板默认值由构建过程注入(当前仓库对应net10.0);-ov|--orchard-version:指定使用的 Orchard Core 包版本。
3. 创建 "Hello World" 模块
继续在同一目录执行:
dotnet new ocmodulemvc -n OrchardCore.Mvc.HelloWorldocmodulemvc即 "Orchard Core Mvc Module" 模板,配置见 OrchardCore.Templates.Mvc.Module/.template.config.src/template.json,同样支持-f|--framework与-ov|--orchard-version两个参数。
4. 添加项目引用(关键步骤)
[!IMPORTANT] 必须为Web 应用添加指向模块的项目引用,否则 Orchard Core 无法发现并加载该模块。
dotnet add OrchardCore.Mvc.Web reference OrchardCore.Mvc.HelloWorld这一步的产物在仓库示例中体现为 OrchardCore.Mvc.Web.csproj 中的<ProjectReference Include="..\OrchardCore.Modules\OrchardCore.Mvc.HelloWorld\OrchardCore.Mvc.HelloWorld.csproj" />。
5.(可选)创建解决方案文件
若想在 Visual Studio 中以解决方案方式打开,可创建.sln并加入两个项目:
dotnet new sln -n OrchardCore.Mvc dotnet sln add OrchardCore.Mvc.Web\OrchardCore.Mvc.Web.csproj dotnet sln add OrchardCore.Mvc.HelloWorld\OrchardCore.Mvc.HelloWorld.csproj测试运行结果
在同时包含两个项目的OrchardCore.Mvc根目录下启动 Web 应用:
dotnet run --project .\OrchardCore.Mvc.Web\OrchardCore.Mvc.Web.csproj[!NOTE] 若使用的是模板的开发分支,启动前先执行:
dotnet restore .\MySite\MySite.csproj --source https://nuget.cloudsmith.io/orchardcore/preview/v3/index.json
应用启动后默认监听以下端口:
Now listening on: https://localhost:5001 Now listening on: http://localhost:5000 Application started. Press Ctrl+C to shut down.(仓库示例的 launchSettings.json 中同样以http://localhost:5000作为launchUrl。)
打开浏览器访问:
https://localhost:5001/OrchardCore.Mvc.HelloWorld/Home/Index页面将显示Hello from OrchardCore.Mvc.HelloWorld。
布局来自主 Web 应用项目,而控制器、Action 与视图均来自模块项目。这一行为在仓库中可以直接验证:
- 布局由 Web 应用的 Views/Shared/_Layout.cshtml 提供,其中
<main>@RenderBody()</main>渲染模块视图的输出;- 控制器、Action 与视图来自模块的 Controllers/HomeController.cs 与 Views/Home/Index.cshtml。
注册自定义路由
默认路由规则
默认情况下,模块内所有路由遵循{area}/{controller}/{action}模式,其中{area}就是模块名。因此模块的HomeController.Index默认地址为:
/OrchardCore.Mvc.HelloWorld/Home/Index改写模块路由以响应首页
在模块OrchardCore.Mvc.HelloWorld的Startup.cs中,于Configure()方法里添加自定义路由:
routes.MapAreaControllerRoute( name: "Home", areaName: "OrchardCore.Mvc.HelloWorld", pattern: "", defaults: new { controller = "Home", action = "Index" } );参数说明:
| 参数 | 含义 |
|---|---|
name | 路由名称,用于 URL 生成(如Url.RouteUrl/ TagHelper 的asp-route) |
areaName | Area 名称,必须与模块名一致,用于隔离不同模块的路由表 |
pattern | URL 模式,空字符串表示匹配站点根路径(首页) |
defaults | 默认路由值,指定命中的控制器与 Action |
这与仓库示例 OrchardCore.Mvc.HelloWorld/Startup.cs 中的实现完全一致。模块的Startup类继承自OrchardCore.Modules.StartupBase,其Configure签名接收IApplicationBuilder、IEndpointRouteBuilder与IServiceProvider,这正是模块能够向应用注册路由的入口。
修改视图内容
同时,可以把模块Views/Home目录下的Index.cshtml修改为:
<h1>Hello World</h1>(仓库示例的 Index.cshtml 使用了 Bootstrap 卡片样式展示 "Hello World" 消息,你可以按需简化。)
验证效果
重启应用,直接访问首页:
https://localhost:5001即可看到Hello World消息。此时请求https://localhost:5001/OrchardCore.Mvc.HelloWorld/Home/Index与https://localhost:5001/会命中同一个控制器 Action——前者走默认{area}/{controller}/{action}规则,后者走自定义的空 pattern 路由。
从源码理解模块化机制
模块清单:Manifest.cs
模板生成的模块自带 Manifest.cs,它通过特性标记声明「这是一个 Orchard Core 模块」:
using OrchardCore.Modules.Manifest; [assembly: Module( Name = "Mvc HelloWorld" )]ModuleAttribute是 Orchard Core 识别模块的唯一入口,还可以继续补充Author、Website、Version、Description等元数据。详细的特性示例可参考 Code Generation Templates 文档中的ocmodulecms模块清单示例。
模块项目为何能被识别为模块
模板生成的模块项目(OrchardCore.Templates.Mvc.Module.csproj)通过引用OrchardCore.Module.Targets包将自身标记为模块;在仓库源码中对应 OrchardCore.Module.Targets.csproj,其描述明确写道:"Converts project/library into an OrchardCore Module that can be referenced in OrchardCore modular application",并通过打包进包的build\目录下的 props/targets 文件在构建期生效。模块项目还需同时具备:
<Sdk="Microsoft.NET.Sdk.Razor">与<AddRazorSupportForMvc>true</AddRazorSupportForMvc>,以便编译 Razor 视图;<FrameworkReference Include="Microsoft.AspNetCore.App" />。
Web 应用如何变成模块化宿主
模板生成的 Web 应用(OrchardCore.Templates.Mvc.Web.csproj)引用OrchardCore.Application.Mvc.Targets包,仓库源码 OrchardCore.Application.Mvc.Targets.csproj 将其描述为"Converts the application into a modular application and adds Asp.Net MVC pipeline"——它聚合了OrchardCore.Application.Targets(应用级模块装载)与OrchardCore.Mvc.Core(MVC 管道)。
而 Web 应用的 Program.cs 则是最小化入口:
var builder = WebApplication.CreateBuilder(args); builder.Services .AddOrchardCore() .AddMvc(); var app = builder.Build(); if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); } app.UseStaticFiles(); app.UseOrchardCore(); await app.RunAsync();其中AddOrchardCore()注册模块系统,.AddMvc()引入 ASP.NET Core MVC,UseOrchardCore()挂载 Orchard Core 中间件管线。模板生成的 Program.cs 结构与此一致,并额外包含了生产环境下的UseHsts()、UseHttpsRedirection()等默认配置。
路由、Area 与模块的隔离
Orchard Core 将每个模块映射为一个 ASP.NET Core Area,Area 名即模块名。MapAreaControllerRoute在 Area 内部注册路由,从而保证不同模块的路由互不干扰;同时由于 Area 隔离,模块的视图默认渲染在宿主应用的_Layout.cshtml中,实现了「模块提供内容、宿主提供外观」的机制。仓库中Startup基类的定义位于 OrchardCore.Modules 命名空间,模块与 Web 应用的装配逻辑则在 OrchardCore.Application.Targets 的 targets 文件中完成。
总结
至此,你已成功使用 Orchard Core 创建了一个模块化 ASP.NET Core MVC 应用,其中:
- Web 应用作为宿主,负责整体布局与 Orchard Core 管线的装配;
- 自定义模块负责注册路由、提供控制器与视图,并响应首页请求。
这套「宿主 + 模块」的结构是 Orchard Core 框架(区别于完整 CMS)最典型的用法:你可以持续添加更多模块、为每个模块配置独立路由与 Area 隔离,从而以标准 ASP.NET Core MVC 的方式构建高度可扩展、可插拔的应用程序。
仓库中的可继续探索资源:
- 模板源码与配置:src/Templates/OrchardCore.ProjectTemplates/content(含
OrchardCore.Templates.Mvc.Web与OrchardCore.Templates.Mvc.Module两个模板项目) - 完整示例宿主:src/OrchardCore.Mvc.Web
- 完整示例模块:src/OrchardCore.Modules/OrchardCore.Mvc.HelloWorld
- 模板安装与使用总览:src/docs/getting-started/templates/README.md
- 模块标记包:src/OrchardCore/OrchardCore.Module.Targets
- 模块化 MVC 应用聚合包:src/OrchardCore/OrchardCore.Application.Mvc.Targets
- CMS
- 后端
- Web框架
【免费下载链接】OrchardCore
Orchard Core is an open-source modular and multi-tenant application framework built with ASP.NET Core, and a content management system (CMS) built on top of that framework.
相关推荐
Orchard Core 自定义模块的创建、定制与安装全指南
Orchard Core 自定义模块的创建、定制与安装全指南 本文围绕 Orchard Core CMS 的自定义模块(Custom Module)展开,覆盖从
CMS后端Web框架Bicep Registry Modules模块开发实战:从零创建自定义模块
Bicep Registry Modules模块开发实战:从零创建自定义模块 概述 Bicep Registry Modules是微软Azure官方维护的Bic
IaC云原生Orchard Core Queries 模块实战指南:自定义查询源、SQL 查询、Web API 与 GraphQL 集成
Orchard Core Queries 模块实战指南:自定义查询源、SQL 查询、Web API 与 GraphQL 集成 Orchard Core 的 Qu
CMS后端Web框架
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考