能,dotnet new web 生成 Minimal API 项目,运行 dotnet run 后可通过 http://localhost:5000 访问纯文本响应;它无 MVC 结构、不服务静态文件,适合快速验证环境或 API 原型。

直接上手 ASP.NET Core,不需要先搞懂所有概念。只要能跑通一个可访问的 Web 应用,你就已经跨过了最硬的门槛。
dotnet new web 能不能直接跑起来?
能,但只能返回纯文本,没有路由、控制器、视图这些 MVC 结构。它是最小可行入口,适合验证环境或写 API 快速原型。
-
dotnet new web -n MyWeb生成的是基于Minimal Hosting Model的项目,Program.cs里只有几行app.MapGet路由 - 默认监听
https://localhost:5001和http://localhost:5000,运行dotnet run就能访问 - 如果浏览器报
ERR_CONNECTION_REFUSED,大概率是端口被占或 HTTPS 证书未信任(Windows 上首次运行可能弹出证书安装提示) - 这个模板不带
wwwroot、不自动服务静态文件,加app.UseStaticFiles()才能访问/favicon.ico这类资源
为什么用 dotnet new mvc 却找不到 HomeController?
因为 dotnet new mvc 默认启用 Top-Level Statements + Minimal Hosting 模式,不再生成传统 Startup.cs 和分离的 Controllers/HomeController.cs 文件 —— 它把路由和逻辑全塞进 Program.cs 了。
- 如果你想要经典 MVC 目录结构(含
Controllers、Views、Models文件夹),得加--use-program-main参数:dotnet new mvc --use-program-main -n MyMvcApp - 否则,
HomeController逻辑实际藏在Program.cs的app.MapControllerRoute+ 匿名委托里,或者靠约定自动发现(需启用AddControllersWithViews()) - 手动创建
Controllers/HomeController.cs后,必须确保Program.cs中调用了builder.Services.AddControllersWithViews(),否则请求 404
Startup.cs 还要不要写?
2022 年后的新项目默认不用写 Startup.cs。.NET 6+ 全面转向 Program.cs 单文件宿主模型,ConfigureServices 和 Configure 被合并为链式配置。
- 旧教程里反复出现的
public class Startup类,在新 CLI 模板中已移除 - 若你打开老项目或某些迁移中的代码,仍能看到
Startup.cs,那是兼容模式,不是推荐路径 -
builder.Services对应原来的IServiceCollection,app对应原来的IApplicationBuilder,语义没变,只是写法扁平化了 - 别试图在新项目里自己建
Startup.cs并用WebApplication.CreateBuilder(args).UseStartup<Startup>()—— 这会绕过默认生命周期,容易引发中间件顺序错乱
Razor Pages 和 MVC 到底选哪个?
新手优先选 Razor Pages。它比 MVC 更轻量、更贴近页面思维,每个 .cshtml 文件自带后台逻辑(.cshtml.cs),不用操心控制器映射和视图查找路径。
- 创建命令是
dotnet new razor -n MyRazorApp,生成的Pages/Index.cshtml和Pages/Index.cshtml.cs是一对 - 路由由文件路径决定:
Pages/Counter.cshtml→/Counter,无需额外配置 - MVC 更适合需要复用控制器逻辑、API 与页面共存、或团队熟悉传统分层的场景
- 两者底层共享 Razor 引擎、依赖注入、模型绑定等机制,学会一个,另一个上手极快
最容易被忽略的其实是 appsettings.Development.json 的环境加载逻辑 —— 它只在 DOTNET_ENVIRONMENT=Development 时生效,而 Visual Studio 默认设了这个变量,CLI 下却不一定。调试时发现配置读不到,八成卡在这儿。


















