总览对比表
| 模板 | 命令 | 核心定位 | 架构 | 主要用途 |
|---|---|---|---|---|
| ASP.NET Core Web API | dotnet new webapi | RESTful 接口服务 | 后端API,无UI页面 | 提供JSON接口,给前端、移动端调用 |
| ASP.NET Core MVC | dotnet new mvc | MVC网站 | Model-View-Controller | 传统动态网站,后端渲染页面 |
| Razor Pages | dotnet new razor | 页面驱动网站 | PageModel + Razor视图 | 中小型网站,比MVC简单,页面为中心 |
| ASP.NET Core Web App(空模板) | dotnet new web | 极简空Web | 原始中间件管道 | 从零搭建,最小项目,学习底层 |
| ASP.NET Core Web App(Web应用,带身份验证) | dotnet new webapp | Razor Pages 模板(很多人简称Web App) | Razor Pages | 带登录、注册等页面的Razor网站 |
⚠️ 容易混淆:
dotnet new webapp= Razor Pages模板 ,微软菜单里的「ASP.NET Core Web应用」默认就是Razor Pages;「ASP.NET Core Web API」是独立模板。
1. ASP.NET Core Web API(webapi)
核心特点
- 没有View视图,不返回HTML ,默认返回
JSON,专门做接口服务 - 架构:Controller + Model ,控制器继承
ControllerBase(注意:不是Controller)
ControllerBase:只提供API相关功能,没有视图支持,更轻量Controller:继承自ControllerBase,额外带View支持(MVC用)
- 路由:属性路由为主 Route、HttpGet
4.默认集成:JSON序列化、模型验证、Swagger(开发环境自带接口文档)
目录结构
bash
MyWebApi/
├── Controllers/ # 接口控制器,放Api控制器
├── Models/ # DTO、实体类
├── Program.cs # 应用入口,配置中间件、服务
├── Properties/
└── appsettings.json # 配置文件
适用场景
- 后端服务,给Vue/React/小程序/APP提供REST接口
- 微服务、后台服务、第三方对接接口> > ❗ 不适合:需要后端渲染HTML页面的网站
最简示例控制器
csharp
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
// 返回JSON
}
}
[ApiController]特性:自动模型验证、自动路由推断,Web API特有。
2. ASP.NET Core MVC(mvc)Model-View-Controller
核心特点
MVC 分离三部分:
- Model:数据模型(实体、DTO)
- View :Razor视图文件
.cshtml,后端渲染HTML页面 - Controller :控制器,接收请求,处理业务,返回视图
return View()
控制器继承 Controller(包含View、TempData、ViewBag等页面相关功能)
路由:支持约定路由(默认路由)+ 属性路由"
php
` // Program.cs 默认约定路由
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
目录结构
bash
MyMvc/
├── Controllers/ # 控制器 HomeController
├── Models/ # 模型
├── Views/ # Razor视图(cshtml),MVC核心文件夹!
│ ├── Home/
│ │ └── Index.cshtml
│ └── Shared/ # 布局页 _Layout.cshtml
├── wwwroot/ # 静态资源:css/js/img
├── Program.cs
└── appsettings.json
适用场景
- 传统后台管理网站、企业官网,服务端渲染页面
- 大型复杂Web项目,需要严格分离关注点>
✅ 优点:分层清晰;❌ 缺点:比Razor Pages模板代码量多,页面和Action分散
kotlin
public class HomeController : Controller {
public IActionResult Index()
{
ViewBag.Msg = "Hello MVC";
return View(); // 返回 Views/Home/Index.cshtml
}
}
3. Razor Pages(razor / webapp)
菜单「ASP.NET Core Web应用」就是 Razor Pages。
核心特点
以页面为中心 ,不再是Controller+Action,而是页面(.cshtml) + PageModel(.cshtml.cs)
-
页面和业务代码放在一对文件,紧耦合,更容易维护中小型网站
-
路由:基于文件路径路由,不用手动写路由配置
-
Pages/Index.cshtml→ 访问地址/Pages/About.cshtml→ 访问地址/About
-
PageModel 相当于本页面的控制器,处理请求
OnGet()/OnPost()目录结构(重点:Pages文件夹,替代MVC的Controllers+Views)
目录结构(重点:Pages文件夹,替代MVC的Controllers+Views)
bash
MyRazor/
├── Pages/
│ ├── Index.cshtml # 视图
│ ├── Index.cshtml.cs # PageModel 后台代码
│ ├── Shared/ # 布局页 _Layout.cshtml
│ └── _ViewStart.cshtml
├── wwwroot/
├── Program.cs
└── appsettings.json
代码示例 Index.cshtml.cs
csharp
public class IndexModel : PageModel
{
public string Message { get; set; }
public void OnGet() // GET请求执行
{
Message = "Hello Razor Pages";
}
}
cshtml页面直接使用 @Model.Message
适用场景
- 中小型网站、博客、管理后台
- 新手友好,页面和后台代码在一起,不用在Controller和View来回切换> > ✅ 对比MVC:开发效率更高;❌ 大型复杂项目,MVC分层更利于团队拆分
4. ASP.NET Core Web(空模板 web)
dotnet new web,最小ASP.NET Core项目,没有任何预建中间件、路由、静态文件。 只有Program.cs,手动一点点添加:
ini
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
适合:学习ASP.NET Core管道原理、自定义极简服务。
5. 模板怎么选(选型建议)
- 只写后端接口,给前端调用 → Web API
- 服务端渲染网页,大型项目,习惯MVC分层 → MVC
- 服务端渲染网页,中小型网站,快速开发 → Razor Pages(Web App)
- 底层学习、自定义管道 → 空模板 web
补充:
- MVC 和 Razor Pages 底层都是基于Razor视图引擎,可以混用,但不推荐混合架构;
- Web API 也可以自己写返回HTML,但不推荐,它设计目标就是JSON接口; .NET 6+ 全部模板默认顶级语句(Program.cs不再有Program类) ,取消Startup.cs,服务注册和中间件全部合并到Program.cs。