前言

因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于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();
});
}

后记

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

ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探的更多相关文章

  1. ActionBarSherlock学习笔记 第一篇——部署

    ActionBarSherlock学习笔记 第一篇--部署          ActionBarSherlock是JakeWharton编写的一个开源框架,使用这个框架,可以实现在所有的Android ...

  2. Asp.net core Identity + identity server + angular 学习笔记 (第一篇)

    用了很长一段时间了, 但是一直没有做过任何笔记,感觉 identity 太多东西要写了, 提不起劲. 但是时间一久很多东西都记不清了. 还是写一轮吧. 加深记忆. 这是 0-1 的笔记, 会写好多篇. ...

  3. ASP.NET Core 学习笔记 第二篇 依赖注入

    前言 ASP.NET Core 应用在启动过程中会依赖各种组件提供服务,而这些组件会以接口的形式标准化,这些组件这就是我们所说的服务,ASP.NET Core框架建立在一个底层的依赖注入框架之上,它使 ...

  4. .NET CORE学习笔记系列(5)——ASP.NET CORE的运行原理解析

    一.概述 在ASP.NET Core之前,ASP.NET Framework应用程序由IIS加载.Web应用程序的入口点由InetMgr.exe创建并调用托管,初始化过程中触发HttpApplicat ...

  5. .NET CORE学习笔记系列(4)——ASP.NET CORE 程序启用SSL

    一.什么是SSL? 1.概念: SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数 ...

  6. .NET CORE学习笔记系列(3)——ASP.NET CORE多环境标识

    在开发项目的过程当中,生产环境与调试环境的配置是不一样的.比如连接字符串. ASP .NET CORE 支持利用环境变量来动态配置 JSON 文件.ASP.NET Core 引用了一个特定的环境变量  ...

  7. .NET CORE学习笔记系列(1)——ASP.NET MVC Core 介绍和项目解读

    ASP.NET MVC Core 项目文件夹解读 一.项目文件夹总览 1.1.Properties——launchSettings.json 启动配置文件,你可以在项目中“Properties”文件夹 ...

  8. ASP.NET MVC学习笔记 第一天

    MVC:Mode(模型).View(视图).Controller(控制器)         在服务器接收到请求(Request)时,路由(Routing)定义了应该调用的控制器,以及应该调用的控制器动 ...

  9. 【ASP.NET MVC 学习笔记】- 20 ASP.NET Web API

    本文参考:http://www.cnblogs.com/willick/p/3441432.html 1.ASP.NET Web API(本文简称Web API),是基于ASP.NET平台构建REST ...

随机推荐

  1. prism 的学习网站

    C#的学习网址: https://www.cnblogs.com/zh7791

  2. Linux虚拟机系统中进行redis的哨兵模式配置

    一.配置步骤 开一台虚拟机1.创建三个redis配置文件:/etc/redis下pidfile "/var/run/redis6380.pid" redis的id号port 638 ...

  3. qt 中的画图

  4. 【springcloud】常见面试题总结

    1.springcloud与dubbo的区别? https://jingyan.baidu.com/article/b0b63dbf3784294a483070fa.html 1.1 springcl ...

  5. 微信小程序学习笔记三 路由的基本使用

    小程序中路由的使用 1.1 页面路由 在小程序中, 所有页面的路由全部由框架进行管理 1.2 页面栈 框架以栈的形式维护了当前的所有页面, 当发生路由切换的时候, 页面栈的表现如下: 1.3 获取当前 ...

  6. REST设计风格:你写的 RESTful API 到第几层了?

    理解REST 在理解其真正概念前,我们先来明确: REST它的核心思想是面向资源的抽象(相对于RPC就是面向过程抽象),它是一种设计风格的指导,而非具有较强约束的协议. REST源于Roy Thoma ...

  7. react项目实现多语言切换

    网站的语言切换功能大家都见过不少,一般都是一个下拉框选择语言,如果让我们想一下怎么实现这个功能,我相信大家都是有哥大概思路,一个语言切换的select,将当前的选择的语言存在全局,根据这个语言的key ...

  8. React 性能调优记录(下篇),如何写高性能的代码

    react性能非常重要,性能优化可以说是衡量一个react程序员水平的重要标准. 减少你的渲染 这个大家都明白,只要是父组件中用了子组件,子组件就算没用prop也会进行依次渲染, 可以用pureCom ...

  9. redis BLPOP命令阻塞,非阻塞(读了好久才懂)

    来源于:http://redisdoc.com/list/blpop.html#id1BLPOP key [key -] timeout 可用版本: >= 2.0.0 时间复杂度: O(1) B ...

  10. Layui form表单提交注意事项

    // 表单提交form.on('submit(first1)', function (data) { var articleFrom = data.field; $.ajax({ type:" ...