普里亚普斯 学习站

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1415 | 回复: 6

[RESTful API] 第 02 章 .NET Core 和 ASP.NET Core

[复制链接]

15

主题

76

回帖

1138

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1138
发表于 2021-8-28 01:30:17 | 显示全部楼层 |阅读模式
.NET Core 的主要特点是跨平台,其他特点:开源(使用了宽松的MIT和Apache 2 开源协议)。
.NET Standard,是.NET平台遵循的一套接口规范。

人们很容易将 .NET Standard 与 .NET Core、.NET Framework混淆。

.NET Core 包含下面几部分:
  • CoreCLR:即 .NET Core CLR,它是 .NET Core 的运行时(Runtime),包含垃圾回收器、JIT编译器、原生数据类型、本机交互操作及底层类等,CoreCLR使用改进的、跨平台开源编译器RyuJIT作为其编译器。
  • CoreFX:即 .NET Core Libraries,又称基类库(Basic Class Library,BCL),它是.NET Core的基础类库,实现了.NET Standard,包含集合、文件系统、JSON、异步等API。
  • Roslyn编译器:用于将C#或VB.NET代码编译为程序集。
  • .NET Core CLI 工具:用于构建.NET Core应用程序和类库。

.NET Core 与 .NET Framework 都是不同的 .NET 平台,区别:
  • 前者跨平台后者不是;
  • .NET Core采用包化(Packages)的管理方式,.NET Framework采用大包式安装。
  • .NET Core中,各个包也有独立的版本线,不再硬性要求应用程序跟随主线版本。

.NET Standard简介
是一套.NET规范或标准,这套标准定义了所有.NET平台都应实现的接口,即API。因此,.NET Standard 不像 .NET Core 一样,并不是一个平台(Platform)。

除了 .NET Core 与 .NET Framework 这两个 .NET 平台外,.NET平台还包括:Xamarin,其是一个跨平台的移动应用开发解决方案,简化了针对多种平台的应用开发,包括iOS和Android等。



每个平台支持不同的 应用模型,并且每个平台都基于相应的 基础类库(BCL)。对于这些不同的.NET平台,存在的主要问题是代码共享或者类库共享问题。

例如,要使它们使用同一套业务逻辑,就需要分别创建多个代码相同但目标平台却不同的类库项目,如图2-2所示。



而 .NET Standard 的出现正是为了解决这一问题。它并不是一个新的.NET平台,而是一套标准或者规范,它定义了能适用于所有.NET平台的接口,如下图所示。



此时,为了解决类库共享的问题,只要创建一个.NET Standard类库,并由不同平台的.NET应用程序引用即可。



作为一套标准,.NET Standard有不同的版本

.NET Core 1.0实现了.NET Standard 1.6,而.NET Core 2.0实现了.NET Standard 2.0,其完整的版本:https://docs.microsoft.com/zh-cn/dotnet/standard/net-standard#net-implementation-support

.NET Standard 2.0是对.NET Standard 1.6的重大升级, 1.6 中包括了大约13000多个API,而 2.0 将API数量增加到32000多个,包括:
  • IO:Files、Compression、MMF。
  • XML:Xlinq、XML Document、Xpath、Schema、XSL。
  • Serialization:BinaryFormatter、DataContract、XML。
  • Threading:Threads、Thread Pool、Tasks。
  • Data:DataTable、DataSet、Provider model。
  • Networking:Http、Sockets、Websockets、Mail。
  • Core:Primitives、Collections、Linq、Reflection、Interop。

.NET Standard最新的版本为2.1,该版本新增加3000多个API,它们主要包括Span<T>、ValueTask、ValueTask<T>和DbProviderFactories等。

由于不同的.NET Standard版本包含的API不同,因此在创建.NET Standard类库中,应合适地选择其版本。一般来说,更高版本包括更多的API,但更低版本兼容的平台更多。

选择方法:
* 项目的属性中选择不同的目标框架
* 修改目标框架的另一种方法是编辑项目文件(*.csproj),在其中的<TargetFramework>节点中指定不同的.NET Standard版本,如下所示
[mw_shl_code=xml,false]<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>
</Project>[/mw_shl_code]要查询不同.NET Standard版本所包含的API,可:https://docs.microsoft.com/zh-cn ... &preserve-view=true



ASP.NET Core简介
免费、开源、高性能且跨平台的Web框架,用来构建Web应用程序。
ASP.NET Core具有以下优点:
  • 跨平台,能够在Windows、macOS和Linux系统上开发、编译和运行。
  • 统一Web UI与Web API开发。
  • 集成新式客户端框架和开发工作流。
  • 基于环境配置以及云就绪配置。
  • 内置依赖项注入。
  • 轻型的高性能模块化HTTP请求管道。
  • 能够在IIS、Nginx、Apache和Docker上进行托管或者在当前进程内自托管。
  • 当目标框架为.NET Core时,支持并行应用版本控制。
  • 简化新式Web开发工具。
  • 开源和以社区为中心。


主要特征
(1)跨平台与“自我宿主”
借助于.NET Core与Kestrel(服务器软件,类似Nginx),ASP.NET Core能够在不同的操作系统(如Windows、macOS和Linux)上生成并运行。Kestrel是ASP.NET Core中内置的跨平台服务器,具有高性能、速度快等特点。ASP.NET Core应用程序的一个重要优点是它本质上是一个控制台程序,因此能够实现“自我宿主”。

(2)统一Web UI与Web API开发
在ASP.NET中,Web UI和Web API是两个分开的不同的子框架,前者用于创建基于HTML页面的Web应用程序,后者则用于创建Web API应用程序,如RESTful API。ASP.NET Core将这两者合并,简化了Web应用与Web API的开发模式。

(3)内置依赖项注入
ASP.NET Core提供了依赖注入容器,且在框架内部大量地使用了依赖注入,有助于创建低耦合的应用程序。

(4)轻型的高性能模块化HTTP请求管道
在ASP.NET Core中,多个中间件构成了HTTP请求管道,用于处理请求与响应。每个中间件都能够对请求进行一些处理,并继续传递到下一个中间件或直接中断请求而返回响应。这种管道机制极大地提高了HTTP请求处理的灵活性。

(5)基于环境配置及云就绪配置
ASP.NET Core支持运行环境的配置,针对不同的环境可以使用不同的配置,从而表现出不同的行为。这些环境包括了开发(Development)、预演(Staging)及生产(Production)。ASP.NET Core中提供了全新的配置模型,支持从多种配置源获取配置,如配置文件、环境变量和命令行参数等。

(6)支持容器
容器目前已经是非常流行的技术,如Docker和Kubernetes等。ASP.NET Core支持这些主流的技术,将ASP.NET Core应用程序部署到容器中非常容易。


ASP.NET Core 2.1新增特性
ASP.NET Core 2.2新增特性
ASP.NET Core 2.1 升级到 ASP.NET Core 2.2
安装 Visual Studio
安装 Visual Studio Code
.NET Core CLI

使用 Visual Studio 2019
创建一个 ASP.NET Core Web 应用程序,模板选 API,去掉 Docker 和 HTTPS,不进行身份验证。

启动 Docker:会在所创建项目中添加Docker容器所需要的文件,这对于将应用程序部署到Docker容器中很便利;
配置 HTTPS:将使应用程序默认支持HTTPS,这个选项自ASP.NET Core 2.1后默认勾选。



  • launchSettings.json:应用程序 运行配置文件,包含了程序运行的相关配置,如URL和端口信息等。
  • wwwroot:文件夹,用于存储静态文件,如图片、CSS和JavaScript等文件。
  • 依赖项:当前应用程序所依赖的NuGet包和SDK,其中Microsoft.ASP.NETCore.App含了ASP.NET Core应用程序要引用的API,而Microsoft.NETCore.App含了.NET Core中的所有API。
  • Controllers:文件夹,用于存储所有的Controller类文件,这些文件通常以Controller.cs结尾。
  • appsettings.json:配置文件,用于存储在应用程序运行时要用到的一些配置项。
  • Program.cs:程序入口类,ASP.NET Core应用程序从这个类中的Main函数运行,这与控制台程序完全一样。
  • Startup.cs:应用程序启动时的配置类,用于配置ASP.NET Core应用程序中的服务、中间件、MVC和异常处理等。
[mw_shl_code=csharp,false][Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    // GET api/values
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        return new string[] { "value1", "value2" };
    }
    // GET api/values/5
    [HttpGet("{id}")]
    public ActionResult<string> Get(int id)
    {
        return $"请求时id的值为{id}";
    }
    // POST api/values
    [HttpPost]
    public void Post([FromBody] string value)
    {
    }
    // PUT api/values/5
    [HttpPut("{id}")]
    public void Put(int id, [FromBody] string value)
    {
    }
    // DELETE api/values/5
    [HttpDelete("{id}")]
    public void Delete(int id)
    {
    }
}[/mw_shl_code]

除了默认的IIS Express外,还有HelloAPI,也即应用程序自身的名字,这两个运行选项称为配置文件(Profile)。

不同的配件文件会使Visual Studio在启动应用程序时采用不同的配置。
选择IIS Express会使用IIS Express运行应用程序,它和直接以IIS作为应用程序的宿主很相似;而后者,以应用程序名称命名的配置文件,则会使用dotnet run来运行程序。

打开项目中Properties文件夹下的launchSetting.json文件,上述两个配置文件的信息都在这个JSON文件中:
[mw_shl_code=json,false]{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false,
    "anonymousAuthentication": true,
    "iisExpress": {
      "applicationUrl": "http://localhost:22277",
      "sslPort": 0
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "swagger",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "HelloAPI": {
      "commandName": "Project",
      "dotnetRunMessages": "true",
      "launchBrowser": true,
      "launchUrl": "swagger",
      "applicationUrl": "http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}[/mw_shl_code]它包含两个主要的节点iisSettings和profiles;
前者主要用于配置IIS中的认证信息以及IIS Express运行时使用的URL和端口信息;
后者则包含了所有的运行配置文件,即IIS Express和HelloAPI,在每个节点下,包括了若干配置项,如命令名称(commandName)、运行时是否启动浏览器(launchBrowser)、运行后在浏览器中要打开的URL(launchUrl)和环境变量(environmentVariables)等。

所有这些配置项,也可以在项目属性中的“调试”选项卡中配置



本章完




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

52

回帖

72

积分

注册会员

Rank: 2

积分
72
发表于 2023-5-17 09:23:48 | 显示全部楼层
楼主admin是我最佩服的人!
回复

使用道具 举报

0

主题

50

回帖

70

积分

注册会员

Rank: 2

积分
70
发表于 2023-5-19 01:39:29 | 显示全部楼层
对楼主的崇拜如洪水滔滔
回复

使用道具 举报

1

主题

58

回帖

80

积分

注册会员

Rank: 2

积分
80
发表于 2023-5-24 06:16:06 | 显示全部楼层
不错的帖子
回复

使用道具 举报

1

主题

58

回帖

80

积分

注册会员

Rank: 2

积分
80
发表于 2023-5-27 03:55:24 | 显示全部楼层
给力啊
回复

使用道具 举报

2

主题

73

回帖

210

积分

中级会员

Rank: 3Rank: 3

积分
210
发表于 2023-6-11 14:24:23 | 显示全部楼层
admin,你是天使请来的都比吗?
回复

使用道具 举报

15

主题

76

回帖

1138

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1138
 楼主| 发表于 2023-6-13 07:08:56 | 显示全部楼层
厉害啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋

GMT+8, 2024-5-15 19:06 Processed in 0.037520 second(s), 28 queries .

© 2024 普里亚普斯 学习站 Powered by Discuz! X3.4 Licensed Theme by Jvmao 粤ICP备19010473号

快速回复 返回顶部 返回列表