ASP.NET Core是微软开发的一个开源跨平台Web应用程序框架,它提供了高性能、模块化、跨平台的Web开发体验。ASP.NET Core(基于.NET Core)是ASP.NET(基于.NET Framework)的新一代版本,它们之间并不是直接的升级关系,虽然部分概念和功能用法类似,但迁移时可能需要较多调整。本系列笔记以最新的.NET 6为例,介绍ASP.NET Core WebAPI框架的用法,有关MVC、SignalR等内容将在其它章节介绍。
ASP.NET Core具有如下优点:
总而言之,ASP.NET Core是一个现代的高性能Web开发框架,适用于构建各种类型的Web应用。
Java的SpringBoot经常被用来和ASP.NET Core进行对比,不可否认的是依托于Java庞大的生态,Spring(包括SpringBoot、SpringCloud)是当下最流行、功能最强大的Web开发技术栈之一,尤其是分布式系统和涉及微服务领域,相比之下ASP.NET Core占有的份额小到可以忽略。然而Java的历史比较厚重,曾经很长一段时间Java都被搁置在Java8版本,Spring中也有很多历史遗留问题,这就使得它不像被重新设计的.NET Core体系更新的那么激进,SpringBoot也不如ASP.NET Core设计的轻量和优美。然而,随着服务网格的普及和流行,未来的微服务可能不再关注具体某一个微服务用哪种技术实现,因为服务网格可以真正的做到异构系统也能无缝集成到一起,未来我们可能有机会抛开Spring“全家桶”,体验一些不同的技术。
除了Java以外,Go语言和其生态(包括Gin、Beego等框架)也可以和ASP.NET Core进行对比,Go语言具有语法简单、高性能、静态编译等特点,很多团队都尝试过采用Go语言来开发一部份模块作为Java的替代,然而Go语言的缺点也很明显,Go语言的语法过于简单和偏执,生态也不如Java和.Net成熟,很多人认为这种有点蹩脚的语言从开发体验上来说相比Java和C#差距较大。
首先确认你已经安装了.Net SDK6或更高版本,我们可以执行以下命令查看dotnet
命令已安装的工程模板。
dotnet new list
创建ASP.NET Core WebAPI工程需要使用webapi
模板,我们可以执行以下命令创建工程。
dotnet new webapi -n DemoWebAPI --framework net6.0
其中-n
参数指定工程名,--framework
指定选择的.Net SDK版本。
在Visual Studio中,我们可以选择「ASP.NET Core Web API」工程模板来创建ASP.Net Core WebAPI工程。
提示:创建工程时,可以取消勾选Configure for HTTPS
。这个功能会启用Kestrel的HTTPS功能,实现在开发阶段提供HTTPS支持,但需要我们同意一个自签名证书。实际生产环境我们都是使用Nginx等对后端服务进行反向代理的,HTTPS配置在Nginx这一层,而应用程序这一层还是以HTTP协议提供服务,在开发阶段开启HTTPS就有点画蛇添足了。HTTPS的配置也可以通过编辑项目内的launchSettings.json
修改。
假如我们的工程名为DemoWebAPI
,默认创建的WebAPI工程目录结构大致如下。
|_bin # 编译输出目录,不需要手动编辑
|_obj # 编译的中间文件目录,不需要手动编辑
|_Controllers # 控制器代码文件夹
|_WeatherForecastController.cs # 默认创建的一个例子控制器
|_Properties # 用于存放与项目运行和配置相关的文件
|_launchSettings.json # 配置开发环境下的运行和调试行为,不会被发布到生产环境中
|_WeatherForecast.cs # 默认创建的一个例子实体类
|_Program.cs # 工程入口文件,.NET6下该文件默认采用了C#9的顶级语句
|_appsettings.json # 工程配置文件,包含了一些ASP.NET Core默认读取的配置字段,也可以在其中编写自定义配置字段
|_appsettings.Development.json # 分环境的工程配置文件,程序运行后对应环境的配置文件会和appsettings.json合并,环境可以通过环境变量`ASPNETCORE_ENVIRONMENT`指定
|_DemoWebAPI.csproj # 工程描述文件
我们点击Visual Studio的运行按钮即可运行工程。
对于WebAPI项目,启动后默认会打开Swagger页面,我们可以在这个页面中测试我们的JSON接口。默认的Swagger页面如下图所示。