您现在的位置是:首页 > .NET

.NET

适用于 ASP.NET 开发者的 ASP.NET Core

2020-11-09 09:29:10 .NET admin
关于ASP.NETCore的大多数热点话题都是围绕它支持的多平台体验。虽然这是一项巨大成就,但如果你是常规ASP.NET用户,编写了大量基本.NET4.x代码,并打算继续使用熟悉的IIS和Windows环境,那么这就不是一个加分项。在这种情
关于ASP.NETCore的大多数热点话题都是围绕它支持的多平台体验。虽然这是一项巨大成就,但如果你是常规ASP.NET用户,编写了大量基本.NET4.x代码,并打算继续使用熟悉的IIS和Windows环境,那么这就不是一个加分项。在这种情况下,ASP.NETCore向此类常规ASP.NET开发者传达的价值主张是什么呢?

这一全新平台最初可能看起来完全不同,就像有人突然偷偷地动了你的奶酪一样。ASP.NETCore是根据较为新式的做法重新生成的全新产品。此产品可能会也可能不会提升你的编程能力和满足客户需求的能力。实际上,没有人可以代表你回答这个问题。本专栏将拨开任何大肆宣传、基准和技术重点的迷雾,直奔讨论的要旨。如果你继续使用当前平台,那么ASP.NETCore的哪些方面可以吸引你的注意?

框架中采用的常见做法

ASP.NET团队成员在设计原始ASP.NET框架时,采用了ActiveServerPages的大多数最佳做法,并在新框架中采用了这些做法。在此过程中,他们还引入了许多新内容,如编译代码和托管代码、自动回发和服务器控件。ASP.NETCore采用同一演化模式。

常见开发做法(如初始加载配置数据、依赖关系注入、NuGet包、基于声明的身份验证和Razor改进)是新框架的原生特性。新框架还具有不同的启动过程、更为模块化的请求响应中间件,以及用于定义控制器和视图的略为灵活的基础结构。ASP.NETCore还是跨平台框架,可方便你开发并在Windows、macOS和Linux上托管应用程序。这样一来,ASP.NETCore会强制你编写更优质的代码,即默认强制实现其他一些水平的关注点分离。你也可以通过自律实现此目标。

对于任何形式的新开发,ASP.NETCore绝对是理想之选。然而,作为全新的框架,一些初始成本是不可避免的:所有团队成员都必须精通此框架。此外,所有成员还必须精通“模型-视图-控制器(MVC)”应用程序模型。并不是所有可标记为新开发的框架都是全新的。可取的做法是,重用现有代码块,或至少利用所掌握的现有技能(即数据访问或安全技术)。这样做的现实可能性有多大?针对这一点,ASP.NETCore分为两种类型。

ASP.NETCore的类型

图1展示了用于新建项目的VisualStudio2015对话框。(与VisualStudio2017对话框基本相同。)


第一个模板可创建经典的非Core项目。另外两个模板可创建定位不同.NETFramework的ASP.NETCore项目。这是探索ASP.NETCore未知领域过程中遇到的第一个十字路口。

选择使用完整的.NETFramework可以访问任何现有.NET类库,但仅限为在Windows和IIS上托管。图2总结了两种类型的区别。


无论选择哪个版本的.NETFramework,使用ASP.NETCore都会在新的运行时环境中公开代码,此环境整合了基于system.web的MVC运行时与由OWIN原则驱动的WebAPI。

与IIS分离

近年来,WebAPI框架试图解决瘦服务器的高需求问题,此类服务器能够向任何启用了HTTP的客户端公开RESTful接口。WebAPI将应用程序模型与Web服务器分离开来,形成了OWIN规范,即一组Web服务器和应用程序互操作规则。然而,WebAPI需要主机,当在ASP.NET应用程序上下文中托管时,它会直接将另一个运行时环境添加到内存占用中。

这是整个行业向最简化Web发展的产物。最简化Web服务器是用于尽快获取内容的HTTP终结点,只是在一些业务逻辑的基础上添加了瘦HTTP层。最简化服务器只需根据需要处理请求,并返回响应(无开销,业务逻辑除外)即可。

虽然可以在一定程度上进行自定义,但目前的ASP.NET运行时环境并不旨在处理类似方案。将ASP.NET环境与宿主环境分离开来是ASP.NETCore的主要变化,也是后续许多应用程序级变化的原因所在。

应用程序启动

新建项目后,你首先会注意到缺少global.asax文件,但有program.cs文件。令人震惊的是,ASP.NETCore应用程序是由.NET驱动程序工具启动的简单控制台应用程序(bit.ly/2mLyHxe)。

.NET工具是多平台支持的关键。一旦命令行工具(和.NETCore框架)可用于新平台,那么托管便会简化为连接Web服务器和工具。在IIS控制下,发布是通过特别模块.NETCoreWindows服务器托管包完成(bit.ly/2i9cF4d)。

在Apache控制下,发布时通过配置文件在Ubuntu服务器上实现。有关示例,请访问bit.ly/2lSd0aF。

实际的Web服务器起到反向代理的作用,并通过配置的端口与控制台应用程序进行通信。控制台应用程序是在另一个更简单的Web服务器的基础上构建而成,此服务器用于接收请求,并触发内部应用程序管道来处理这些请求。下面的代码就执行此任务:
varhost=newWebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
Host.Run();