TOC
ASP .NET Core 3 框架揭秘 - 全新的开发体验
Windows平台
1. 构建开发环境
-
安装SDK和IDE, .NET Core SDK 提供一个重要的命令行工具dotnet.exe
-
查看当前.NET Core SDK的基本信息
dotnet --info
2. 使用命令行创建.NET Core应用
-
获取脚手架模板列表
dotnet new --list dotnet new [template type name] -n [project/item name]
-
Templates: Project Template, Item Template。
-
[project name].csproj
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <!--编译输出类型--> <OutputType>Exe</OutputType> <!--目标框架--> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> </Project>
-
-
编译项目,bin\Debug\netcoreapp3.0
dotnet build
-
运行项目
dotnet run
3. ASP .NET Core 应用
一个ASP.NET Core 应用构建在ASP.NET Core框架之上,ASP.NET Core框架利用一个消息处理管道
完成对HTTP请求的监听
、接收
、处理
和最终的响应
。
ASP.NET Core管道
由一个服务器(Server)
和若干个中间件(Middleware)
构成,当宿主(Host)
程序启动后,管道被构建出来,管道的服务器就开始监听来自客户端的HTTP请求。
-
添加引用/修改SDK
<!--添加引用--> <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <!--编译输出类型--> <OutputType>Exe</OutputType> <!--目标框架--> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> <ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup> </Project>
<!--修改SDK--> <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <!--目标框架--> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> </Project>
-
修改SDK > launchsettings.json
该文件设置仅在Development环境下使用,Production环境下不需要该文件。
{ //设置IIS相关选项 "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:51742/", "sslPort": 44340 } }, //描述应用启动场景 "profiles": { "IIS Express": { //启动应用的命令类型(IIS、IISExpress、Executable<.exe>、Project) //Executable > executablePath:设置启动可执行文件路径 "commandName": "IISExpress", //应用启动时是否自动启动浏览器 "launchBrowser": true, //环境变量 "environmentVariables": { //表示当前部署环境 "ASPNETCORE_ENVIRONMENT": "Development" } }, "HelloWorld": { "commandName": "Project", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, //应用采用的URl列表 "applicationUrl": "https://localhost:5001;http://localhost:5000" } } }
-
注册服务与中间件
- 服务承载系统:
- 需长时间运行的操作:
IHostedService
承载服务 - 所有承载服务的宿主(Host):
IHost
对象 IHost
对象 的构建者(Builder):IHostBuilder
对象
- 需长时间运行的操作:
- ASP.NET Core 应用本质:一个用来
监听
、接收
和处理
HTTP请求的后台服务(GenericWebHostService : IHostedService
)。 - 运行的ASP.NET Core 应用本质体现:由
一个服务器(Server)
和若干个中间件(Middleware)
构成的消息处理管道
(由GenericWebHostService
服务构建)。- 服务器(Server):解决针对HTTP请求的监听、接收和最终响应。
- 中间件(Middleware):针对请求的处理。
- ASP.NET Core提供的常用原生服务类型:
KestrelServer
:跨平台的Web服务器,可以作为独立的Web服务器直接对外提供服务,也可以结合传统的Web服务器(IIS、Apache、Nginx…)将它们作为反向代理使用。HTTP.sys
:只能在Windows平台上使用的Web服务器,本质是在一个操作系统内核模式运行的驱动,所以能够提供非常好的性能。
class Program { static void Main(string[] args) { //1. 创建IHostBuilder对象 Host.CreateDefaultBuilder() //2. 用ConfigureWebHost构建请求处理管道 .ConfigureWebHost(webHostBuilder => webHostBuilder //2.1. 将KestrelServer注册为服务器 .UseKestrel() //显式指定URL //.UseUrls("http://0.0.0.0:3721;https://0.0.0.0:9527") //2.2. 注册中间件 .Configure(app => app.Run( context => context.Response.WriteAsync("Hello World")))) //2. 用ConfigureWebHostDefaults构建请求处理管道 .ConfigureWebHostDefaults(webHostBuilder => webHostBuilder //2.1. 注册中间件 .Configure(app => app.Run( context => context.Response.WriteAsync("Hello World")))) //3. 构建宿主IHost对象 .Build() //4. 启动程序 .Run(); } }
- 服务承载系统:
-
运行项目
dotnet run
注册的
KestrelServer
服务默认会绑定到http://localhost:5000
和https://localhost:5001
的地址监听请求。承载环境(Hosting Environment)
为Production
。
4. ASP.NET Core MVC 应用
ASP.NET Core MVC开发框架是建立在用来实现路由的EndpointRoutingMiddleware
中间件和EndpointMiddleware
中间件构建的路由系统上。这两个中间件采用终结点(Endpoint)映射
的方式实现针对HTTP请求的路由。
MVC应用路由映射体现:HTTP请求与目Controller类型中标Action的映射。
ASP.NET Core MVC利用路由系统
为它分发请求,并在此基础上实现针对目标Controller
的激活、Action方法
的选择和执行,以及最终对于执行结果的响应。
-
注册服务与中间件
ASP.NET Core框架内置了一个原生的
依赖注入框架
,该框架利用依赖注入容器
提供管道在构建以及请求处理过程中所需的服务,这些服务需要在应用启动时被预先注册。class Program { static void Main(string[] args) { //1. 创建IHostBuilder对象 Host.CreateDefaultBuilder() //2. 构建请求处理管道 .ConfigureWebHostDefaults(webHostBuilder => webHostBuilder //2.1. 依赖服务注册 .ConfigureServices(services => services .AddRouting() .AddControllersWithViews()) //2.2. 注册中间件 .Configure(app => app //注册EndpointRoutingMiddleware中间件 .UseRouting() //注册EndpointMiddleware中间件 .UseEndpoints(endpoints => endpoints //完成定义在Controller类型中所有Action方法的映射 .MapControllers()))) //3. 构建宿主IHost对象 .Build() //4. 启动程序 .Run(); } }
-
引入视图(View)
//继承Controller类型,使HelloController具有视图呈现能力 public class HelloController : Controller { [HttpGet("/hello/{name}")] //IActionResult:Action方法执行的结果 public IActionResult SayHello(string name) { //将值传递给呈现的视图 ViewBag.Name = name; //返回当前Action方法对用的ViewResult对象 //未显式指定视图名,视图引擎会将当前Action的名称作为视图名 return View(); } }
视图引擎定位视图文件(读取对应.cshtml)的规则:
{ContentRoot}\Views\{ControllerName}\{ViewName}.cshtml
。{ContentRoot}\Views\Hello\SayHello.cshtml
<html> <head> <title>Hello World</title> </head> <body> <p>Hello, @ViewBag.Name</p> </body> </html>
-
注册Startup类型
开发中,一般将中间件以及依赖的服务注册定义到一个单独的类中。按照
约定
,通常命名为Startup
。约定优于配置。//不需要实现/继承某个预定义接口/类型,采用基于约定的定义方式 public class Startup { public void ConfigureServices(IServiceCollection services) => services .AddRouting() .AddControllersWithViews(); public void Configure(IApplicationBuilder app) => app .UseRouting() .UseEndpoints(endpoints => endpoints.MapControllers()); }
class Program { static void Main(string[] args) { //1. 创建IHostBuilder对象 Host.CreateDefaultBuilder() //2. 构建请求处理管道 .ConfigureWebHostDefaults( webHostBuilder => webHostBuilder.UseStartup<Startup>()) //3. 构建宿主IHost对象 .Build() //4. 启动程序 .Run(); } }
macOS
1. 构建开发环境
-
安装SDK和IDE, .NET Core SDK 提供一个重要的命令行工具dotnet.exe
-
查看当前.NET Core SDK的基本信息
dotnet --info
2. 使用命令行创建.NET Core应用
Linux
支持.NET Core 的Linux Distribution
: RHEl、Ubuntu、Debian、Fedora、CentOS、SUSE
。
1. 启用Linux子系统
-
开启Windows 10 > Linux子系统(
Windows Subsystem for Linux, WSL
)。只需开启Virtual Machine Platform
和Windows Subsystem for Linux
两个特性。Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
-
从Microsoft Store下载安装对应的
Linux Distribution
。 -
查看安装的
Linux Distribution
的版本信息//进入`Linux Bash Shell` bash lsb_release -a //回复CMD命令行模式 exit
2. 构建开发环境
-
注册Microsoft密钥和源
//在安装.NET之前,您需要注册Microsoft密钥,注册产品存储库并安装所需的依赖项。每台机器只需执行一次。 ~$ wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb ~$ sudo dpkg -i packages-microsoft-prod.deb
-
安装.NET SDK,更新可用于安装的产品,然后安装.NET SDK
sudo apt-get update sudo apt-get install apt-transport-https sudo apt-get install dotnet-sdk-3.0
-
如果第二步收到类似于的错误消息
Unable to locate package dotnet-sdk-3.0
,请运行以下命令sudo dpkg --purge packages-microsoft-prod && sudo dpkg -i packages-microsoft-prod.deb sudo apt-get update sudo apt-get install dotnet-sdk-3.0
-
查看当前.NET Core SDK的基本信息
dotnet --info
Docker
-
创建Dockerfile文件
-
Restore NuGet packages
dotnet restore
-
生成镜像
docker build -t [image name]
-
针对镜像生成并启动容器
docker run -d -p [hosting machine port]:[internal listening port] --name [container name] [image name]
「下次一定」
下次一定
使用微信扫描二维码完成支付