.NET8 Hello World!
使用ASP.NET Core Web Application模板创建的Empty项目如下:
这是一个最简单的Web项目,运行起来会在根路径响应Hello World!
2.1.1 Programe
代码非常简洁,但内容非常不简单。
var builder = WebApplication.CreateBuilder(args); // 1 创建WebApplication构建者
var app = builder.Build(); // 2 构建WebApplication
app.MapGet("/", () => "Hello World!"); // 3 添加路由处理
app.Run(); // 4 启动
Program
文件看不到Main函数,是因为.NET 5+支持顶级语法(Top-level statements)。
通过反编译可以发现,并不是取消了Main函数,顶级语法只是一个语法糖,编译器会自动为我们生成Main函数,不明确标识命名空间,代码会被置于顶级命名空间中。主要用于编写简单的脚本和小型应用程序。对于复杂的应用程序,仍然建议使用传统的类和方法来组织代码。
MapGet
将RouteEndpoint
添加到IEndpointRouteBuilder
,以匹配指定模式的HTTP GET请求
public static RouteHandlerBuilder MapGet(this IEndpointRouteBuilder endpoints,[StringSyntax("Route")] string pattern,Delegate handler)
该方法有两个参数:
- pattern:路由,支持模式路由
- handler:一个委托,路由匹配后的处理逻辑
即当路由命中时,会被对应委托处理。(源码尽量不在文档中分析,后续会出视频)
2.1.2 appsettings
appsettings.json
和appsettings.Development.json
都是配置文件,其中appsettings.Development.json
,Development对应的是环境变量,常见的还有Production。ASP.NET Core 的配置系统会根据 ASPNETCORE_ENVIRONMENT
环境变量的值来确定当前的环境,如果当前环境是 "Development",则会加载 appsettings.Development.json
文件;如果当前环境是 "Production",则会加载 appsettings.Production.json
文件。
当然你可以自定义更多环境,例如Testing,Staging,UAT等等,你可以通过修改环境变量ASPNETCORE_ENVIRONMENT达到目的,后续的章节我会带大家深入ASP.NET Core的配置系统。
Logging节点可以配置日志相关,比如现在过滤了日志级别,将Microsoft.AspNetCore
命名空间下的所有Warning级别及其它命名空间Information级别以下的日志忽略。"AllowedHosts": "*"
表示允许任意host访问。
2.1.3 launchSettings
launchSettings.json
是 ASP.NET Core 项目中的一个配置文件,用于定义应用程序的启动设置。
如果不想加载 launchSettings.json
的配置,可以通过命令 dotnet run -no-launch-profile
实现,但当前环境就会从Development变为默认的Production
2.1.4 csproj
.csproj
是所有c#项目都有的一个xml项目文件,用于表达项目的结构、依赖项、编译选项等信息。
Sdk
表示我们正在用的sdk是Microsoft.NET.Sdk.Web
Nullable
可空是 C# 8.0 引入的一个新特性,将Nullable设置为enable会开启可空引用类型检测,可以帮助开发人员在编译时捕获潜在的空引用错误,提高代码的健壮性和可靠性。作者本人不推荐在老项目中开启此配置。
ImplicitUsings
会根据代码中使用的类型自动添加相应的命名空间引用,用于简化代码中的命名空间引用。还可以通过 ImplicitUsingNamespace
自定义自动Using命名空间