您的位置:首页 > 编程语言 > ASP

ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探

2021-09-21 22:34 1141 查看

前言

因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入.NET的大环境当中。所以萌生了做一篇关于.NET CORE 学习的学习笔记,借着今天小酌几杯的机会,把这个想法践行一下。

为什么学习 ASP.NET Core程序

数百万开发人员在使用ASP.NET创建Web应用。而ASP.NET Core 是对ASP.NET 的重新设计,在结构上做了更改,产生了更精简、更模块化的框架。 ASP.NET Core 具有如下有点:

  • 生成 Web UI 和 Web API 的统一场景。
  • 针对可测试性进行构建。
  • Razor Pages 可以使基于页面的编码方式更简单高效。
  • Blazor 允许在浏览器中使用 C# 和 JavaScript。 共享全部使用 .NET 编写的服务器端和客户端应用逻辑。
  • 能够在 Windows、macOS 和 Linux 上进行开发和运行。
  • 开放源代码和以社区为中心。
  • 集成新式客户端框架和开发工作流。
  • 支持使用 gRPC 托管远程过程调用 (RPC)。
  • 基于环境的云就绪配置系统。
  • 内置依赖项注入。
  • 轻型的高性能模块化 HTTP 请求管道。
  • 能够托管于以下各项: 1.Kestrel 2.IIS 3.HTTP.sys 4.Nginx 5.APache 6.Docker
  • 并行版本控制
  • 简化新式 Web 开发的工具。

ASP.NET Core 和 ASP.NET 比较

ASP.NET Core ASP.NET
针对 Windows、macOS 或 Linux 进行生成 针对 Windows 进行生成
Razor Pages 是在 ASP.NET Core 2.x 及更高版本中创建 Web UI 时建议使用的方法。 另请参阅 MVC、Web API 和 SignalR。 使用 Web Forms、SignalR、MVC、Web API、WebHook 或网页
每个计算机多个版本 每个计算机一个版
使用 C# 或 F# 通过 Visual Studio、Visual Studio for Mac 或 Visual Studio Code 进行开发 使用 C#、VB 或 F# 通过 Visual Studio 进行开发
比 ASP.NET 性能更高 良好的性能
使用 .NET Core 运行时 使用 .NET Framework 运行时

开发环境

安装.NET Core的开发环境,这里笔者用的是.NET 5.0 和VS 2019。下载地址:https://dotnet.microsoft.com/download 选择自己的平台进行安装。 这里简单说下SDK和RunTime区别:

  • SDK包含Runtime,用于开发,
  • Runtime用于安装运行。 安装完成运行
    dotnet --list -sdk
    查看安装情况。

新建项目

1.打开 VS2019,新建项目。

2.选择ASP.NET Core API 应用,点击下一步,然后创建项目。

3.此处选择.NET 5.0 取消HTTPS勾选。

项目分析

1.整体分析

2.Startup类

Startup 类配置服务和应用请求管道:

  • 包括 ConfigureServices 方法以配置应用的服务。 服务是一个提供应用功能的可重用组件。 在 ConfigureServices 中注册服务,并通过依赖关系注入 (DI) 或 ApplicationServices 在整个应用中使用服务。
  • 包括 Configure 方法以创建应用的请求处理管道。
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}

public IConfiguration Configuration { get; }

public void ConfigureServices(IServiceCollection services)
{

services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "MyWebAPI", Version = "v1" });
});
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyWebAPI v1"));
}

app.UseRouting();

app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}

在应用启动时,ASP.NET Core 运行时会调用 ConfigureServices 和 Configure。

Startup构造函数注入配置IConfiguration。

ConfigureServices方法是把自己或者第三方的服务注入到容器当中(ASP.NET Core 内部包含一整套自己的依赖注入框架),使其在应用和configure方法中可用,服务通过依赖注入或ApplicationServices 进行解析。

Configure方法用于指定应用响应 HTTP 请求的方式。 可通过将中间件组件添加到 IApplicationBuilder 实例来配置请求管道。

ASP.NET Core 模板默认配置管道:

  • 开发人员异常页
  • 异常处理程序
  • HTTP 严格传输安全性 (HSTS)
  • HTTPS 重定向
  • 静态文件
  • ASP.NET Core MVC 和 Razor Pages

3.依赖关系注入(服务)

ASP.NET Core 有内置的依赖关系注入 (DI) 框架,可在应用中提供配置的服务。 例如,日志记录组件就是一项服务。

4.中间件

中间件是一种装配到应用管道以处理请求和响应的软件。 每个组件:

  • 选择是否将请求传递到管道中的下一个组件。
  • 可在管道中的下一个组件前后执行工作 使用 RunMap 和 Use 扩展方法来配置请求委托。 可将一个单独的请求委托并行指定为匿名方法(称为并行中间件),或在可重用的类中对其进行定义。 这些可重用的类和并行匿名方法即为中间件,也叫中间件组件。 请求管道中的每个中间件组件负责调用管道中的下一个组件,或使管道短路。 当中间件短路时,它被称为“终端中间件”,因为它阻止中间件进一步处理请求。 中间件请求过程 每个委托均可在下一个委托前后执行操作。 应尽早在管道中调用异常处理委托,这样它们就能捕获在管道的后期阶段发生的异常。

5.服务器

Kestrel服务器是默认跨平台 HTTP 服务器实现。 Kestrel 提供了最佳性能和内存利用率,但它没有 HTTP.sys 中的某些高级功能。

IIS HTTP 服务器是 IIS 的进程内服务器。 |Kestrel |HTTP.sys| |--|--| |更好的性能和内存利用率。|端口共享| |跨平台|内核模式 Windows 身份验证。 Kestrel 仅支持用户模式的身份验证。| |灵活性,它是独立于操作系统进行开发和修补的。|通过队列传输的快速代理| |编程端口和 TLS 配置|直接文件传输| |扩展性,允许 PPv2 等协议和备用传输。|响应缓存|

6.路由

路由负责匹配传入的 HTTP 请求,然后将这些请求发送到应用的可执行终结点。所有 ASP.NET Core 模板都包括生成的代码中的路由。 路由在 Startup.Configure 中的中间件管道中进行注册。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseRouting();

app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello World!");
});
});
}

7.错误处理

app.UseDeveloperExceptionPage置于中间件管道的前面部分,它能够捕获随后中间件中抛出的未经处理的异常(这里用于开发环境检测错误)。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}

后记

终于写完了整个计划的第一篇,算是一个好的开始吧,毕竟心心念念这么久才迈出了第一步,希望以后自己坚持下去记录自己的学习,然后能帮助一两人,共同前行。最后祝贺大家中秋快乐!

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: