新项目优先选 razor pages,因其路由简洁、适合 crud 场景且入门门槛低;仅当需多视图复用、api 与视图混写或延续现有 mvc 架构时选 mvc。

选对模板比写代码更关键——Web API、Razor Pages、MVC 三者不是“都能用”,而是“必须分清用途”
创建项目时该选哪个模板?
Visual Studio 2022+ 中新建 C# Web 项目,你面对的不是“一个 Web 模板”,而是三个根本不同的起点:
-
ASP.NET Core Web API:只提供控制器(Controllers/)、无视图、默认返回 JSON;适合前后端分离、移动端对接、微服务接口 -
ASP.NET Core Web App (Razor Pages):每个页面是.cshtml+.cshtml.cs组合,逻辑与 UI 紧耦合;适合内部管理后台、表单密集型轻应用 -
ASP.NET Core Web App (MVC):明确分离Models、Views、Controllers;适合需要复用视图、多角色权限、SEO 友好等中大型网站
常见错误:用 Razor Pages 模板硬套 SPA 前端,结果路由混乱、静态资源路径错乱;或用 Web API 模板写带登录页的后台,最后发现缺 wwwroot、缺身份验证中间件、连 CSS 都加载不了。
Program.cs 里必须配什么?
.NET 6+ 后,Program.cs 是唯一入口,所有服务注册和中间件顺序都在这里。漏掉或顺序错,API 就不响应、页面就 404:
- Web API 必须调用
AddControllers()和UseEndpoints(x => x.MapControllers()),否则[ApiController]注解无效,GET /api/values直接 404 - Razor Pages 必须调用
AddRazorPages()和UseEndpoints(x => x.MapRazorPages()),否则Index.cshtml打不开,连首页都报“无法找到匹配的端点” - 若要用
appsettings.json配置项,必须确保var builder = WebApplication.CreateBuilder(args)已执行,且未手动覆盖builder.Configuration
性能影响:把 UseStaticFiles() 放在 UseRouting() 之后、UseEndpoints() 之前;放反了,CSS/JS 就全 404。
运行前最容易被忽略的三件事
点击 ▶ 运行按钮前,请确认这三项——它们不报错,但会让你花一小时查“为什么页面空白”或“为什么 POST 返回 400”:
- 检查
launchSettings.json中的applicationUrl:默认是https://localhost:5001;http://localhost:5000;如果浏览器打不开,先试http://版本(很多新手卡在 HTTPS 证书警告) - 确认控制器类是否继承正确:
Web API要用ControllerBase或Controller,Razor Pages的 PageModel 必须继承PageModel;写成class MyPage无继承,OnGet()根本不会被调用 - POST 请求体传参必须加绑定特性:比如
public IActionResult Post([FromBody] UserDto user),漏掉[FromBody],user就是 null;而GET查询参数不用加,加了反而报错
发布到 IIS 或文件夹后打不开?先看这个
本地能跑 ≠ 发布后能跑。.NET Core 自带 Kestrel,但 IIS 是反向代理,配置差一点就 500.19 或 502.5:
- IIS 上必须安装 .NET Core Hosting Bundle(不是 SDK,也不是 Runtime),否则直接 500.19 错误码
- 发布目标选
Framework-dependent(而非 Self-contained),否则体积暴涨且 IIS 不认 - 应用池 .NET CLR 版本必须设为
No Managed Code(这是最常被忽略的点!IIS 应用池不能设成 v4.0 或 v2.0)
复杂点在于:Razor Pages 项目发布后,Pages/Shared/_Layout.cshtml 若引用了未发布的 JS 文件,页面可能渲染一半就中断,但控制台没报错——得开浏览器开发者工具 Network 标签,逐个看 404 资源。










