ASP.NET Core 项目模板详解:Web应用 / Web API / MVC / Razor Pages

总览对比表

模板 命令 核心定位 架构 主要用途
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)

核心特点

  1. 没有View视图,不返回HTML ,默认返回 JSON,专门做接口服务
  2. 架构:Controller + Model ,控制器继承 ControllerBase(注意:不是Controller)
  • ControllerBase:只提供API相关功能,没有视图支持,更轻量
  • Controller:继承自ControllerBase,额外带View支持(MVC用)
  1. 路由:属性路由为主 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 分离三部分:

  1. Model:数据模型(实体、DTO)
  2. View :Razor视图文件 .cshtml,后端渲染HTML页面
  3. 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. 模板怎么选(选型建议)

  1. 只写后端接口,给前端调用 → Web API
  2. 服务端渲染网页,大型项目,习惯MVC分层 → MVC
  3. 服务端渲染网页,中小型网站,快速开发 → Razor Pages(Web App)
  4. 底层学习、自定义管道 → 空模板 web

补充:

  • MVC 和 Razor Pages 底层都是基于Razor视图引擎,可以混用,但不推荐混合架构;
  • Web API 也可以自己写返回HTML,但不推荐,它设计目标就是JSON接口; .NET 6+ 全部模板默认顶级语句(Program.cs不再有Program类) ,取消Startup.cs,服务注册和中间件全部合并到Program.cs。
相关推荐
IT规划师14 小时前
MQTT实战 - 用了8年MQTT,我为什么还要重新系统啃一遍(一)
物联网·.net
邹肖桥20 小时前
使用S7.net动态库对西门子Plc S7-1200进行通讯操作
.net
chingho1 天前
GitHub上这10个C#项目,不仅实用,还怪好玩的
c#·github·.net·开源项目
学以智用1 天前
Visual Studio 模板详解
.net
波力海苔夹心脆6753 天前
C# 机器视觉实战:单相机引导机械手精准贴合,从拍照、偏差计算(平移+旋转)到坐标补偿全解
开发语言·经验分享·数码相机·c#·视觉检测·.net
慧都小妮子3 天前
Stimulsoft 2026.4 发布:Markdown 组件、桑基图与 .NET 11 支持
.net·数据可视化·stimulsoft·版本更新·报表控件·桑基图·.net 11
波力海苔夹心脆6754 天前
C# 视觉检测实战:PLC 按钮触发 VisionPro 检测,OK 亮灯 / NG 灭灯(西门子 PLC,含界面显示与图片存档)
开发语言·经验分享·c#·自动化·视觉检测·.net
hez20104 天前
一行代码在 .NET 项目里启用 Satori GC
c#·.net·.net core·gc·clr
QUDONG_biubiubiu4 天前
.NET Runtime 6.0/7.0/8.0/9.0下载修复教程,软件打不开这样解决
.net·net runtime下载·net运行库修复·net runtime安装