ASP.NET Core - 开篇
由来
ASP.NET Core 是一个跨平台的高性能开源框架,ASP.NET Core第一次出现在我们眼前是以 ASP.NET vNext 命名的,然后又重新命名为ASP.NET 5,为了表明它并不是 ASP.NET 的简单迭代升级,最终命名为 ASP.NET Core。这是一个重新设计的Web开源框架,它最重要的特性是不再依赖IIS(依然可以部署在IIS上),支持跨平台,可以在任何平台上部署,这要得益于KestrelServer。
ASP.NET Core的性能和ASP.NET有着本质上的区别,因为大部分的ASP.NET被传统的System.Web库所限制,重新设计后的ASP.NET Core具有出色的性能和内存低占用,它的设计更符合现代化的开发思想(模块化),这些设计思想可以使ASP.NET Core整个应用程序更容易开发和维护。
ASP.NET Core本质上就是一个控制台程序,但是又跟Framework的控制台程序不同,因为它在启动的过程中注册了一系列服务,而且构建了一系列的中间件和MVC的路由形成管道监听Http请求和处理。

优点
ASP.NET Core 具有如下优点:
- 生成 Web UI 和 Web API 的统一场景。
- 针对可测试性进行构建。
- Razor Pages 可以使基于页面的编码方式更简单高效。
- 能够在 Windows、macOS 和 Linux 上进行开发和运行。
- 内置依赖项注入。
- 轻型的高性能模块化 HTTP 请求管道。
- 能够在 IIS、Nginx、Apache、Docker 上进行托管或在自己的进程中进行自托管。
.NET生态圈
我们可以看到当前的.NET生态圈如下:

为什么会有.NET Standard 这个东西?从上面的图来看,.NET主要分为三个部分: .NET FrameWork, .NET Core, Xamarin,目前要掌握这三部分的.NET,就意味着需要掌握三种不同的各自的基础类库用来写出在三种平台上运行的代码。这就是 .NET Standard 出现的缘由,以及它要处在的位置,这意味着开发者们只需要掌握以 .NET Standard 作为目标平台的基础类库,就可以在所有 .NET 平台上写出可运行的程序。
我们需要 .NET Standard 有两个理由:
- 对一致性的动力。 我们想达成一个共识,所有 .NET 平台都必须实现一组必需的 API 才可以获得进入 .NET 库生态系统的权限。
- 优秀的跨平台工具的基础。 我们希望一个简化的工具体验,你只需要选择一个版本号来指定所有 .NET 平台的通用部分。
版本差异
在经过了1.x的沉淀后,2.x版本趋向于风格上的稳定,有兴趣知道各个版本的一些特性和变化,可以参考ASPNET.Core各个版本差异以及新特性,有兴趣的还可以关注3.x的预览版。

环境
类似于ASP.NET依赖于Framework,ASP.NET Core 一样需要自己的Runtime和SDK,在Core2.x之后,需要下载VS2017才可进行开发

WebAPI
在ASP.NET Core体系中,不再有独立的WebAPI程序集,这个已经整合到MVC中

我们通过[ApiController]标签以及[Route("api/xx")]路由标志这是一个ApiController
MVC
ASP.NET Core MVC 框架是轻量级、开源、高度可测试的框架,并针对 ASP.NET Core 进行了优化。它提供一种基于开发模式的实现方式,用于生成可彻底分开管理事务的动态网站。 它提供对标记的完全控制,支持 TDD 友好开发并使用最新的 Web 标准。
MVC中加了些许新概念(如TagHelper,ViewComponents等),在实际开发过程中也和ASP.NET MVC有了较大的区别,后面在实际开发过程中讲更多讲解实际的应用。
重要对象和概念
在我们开始进入ASP.NET Core体系之前,我们先了解在ASP.NET Core体系中重要的几个对象和概念,后面我们会陆续碰到再仔细分解。
HttpContext:请求上下文,对应Http请求的整个生命周期
IHostingEnvironment:应用程序的运行的宿主环境配置信息
ILogger:日志接口
IConfiguration: 用于应用程序的配置
IServiceCollection:Aspnet Core原生的依赖注入容器,负责服务注册
IServiceProvider:负责解析注册的实例
IApplicationBuilder:用于构建请求管道
Middleware:中间件,管道的组成者
WebHost:应用宿主
.NET Core 或 .NET Framework的选择
在以下情况,对服务器应用程序使用 .NET Core:
- 用户有跨平台需求。
- 用户正在面向微服务。
- 用户正在使用 Docker 容器。
- 需要高性能和可扩展的系统。
- 需按应用程序提供并行的 .NET 版本。
在以下情况,对服务器应用程序使用 .NET Framework :
- 应用当前使用 .NET Framework(建议扩展而不是迁移)。
- 应用使用不可用于 .NET Core 的第三方 .NET 库或 NuGet 包。
- 应用使用不可用于 .NET Core 的 .NET 技术。
- 应用使用不支持 .NET Core 的平台。
在观望了1.x版本后,以及在2.x的一个实际应用经验中,秉着学习交流的想法,将个人的一些经验写下来,后续的文章将会把ASP.NET Core 中一些核心模块的源码进行解读(ASP.NET Core 的源代码已经全部托管在 GitHub上)以及分享一些实际设计和应用经验,籍此机会和大家交流些许学习心得,希望大家一起进步。
本系列文章更多偏向于原理的解读和实际的应用,如果需要入门的帮助,建议从微软的入门教程开始进行学习。
ASP.NET Core - 开篇的更多相关文章
- 小白开学Asp.Net Core 开篇
开学Asp.Net Core 开篇 一.准备工作 1.操作环境:Win10 2.开发工具:VS2019 3.运行环境:.Net Core 2.2 4.数据库:SqlServer2012 二.项目搭建 ...
- ASP.NET Core - 从Program和Startup开始
Program 我们先看一下1.x和2.x的程序入口项的一个差异 1.x public class Program { public static void Main(string[] args) { ...
- ASP.NET Core模块化前后端分离快速开发框架介绍之1、开篇
源码地址 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin ...
- 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之一 —— 开篇
==== 目录 ==== 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之一 —— 开篇 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之二 —— ...
- (一)学习了解OrchardCore笔记——开篇:基于asp.net core的OrchardCore
想深入了解OrchadCore源码许久了,但是读源码的时候遇到很多问题而网上的参考资料太少了(几乎都是OrchadCms不带OrchardCore的),现在解决得差不多了,做下笔记方便自己查看,有错误 ...
- [ASP.NET Core开发实战]开篇词
前言 本系列课程文章主要是学习官方文档,再输出自己学习心得,希望对你有所帮助. 课程大纲 本系列课程主要分为三个部分:基础篇.实战篇和部署篇. 希望通过本系列课程,能让大家初步掌握使用ASP.NET ...
- Docker打包 Asp.Net Core应用,在CentOS上运行
本文主要介绍下运用docker虚拟技术打包Asp.net core应用. Docker作为一个开源的应用容器引擎,近几年得到广泛的应用,使用Docker我们可以轻松实现应用的持续集成部署,一次打包,到 ...
- asp.net core 2.0+sqlsugar搭建个人网站系列(0)
一些废话 马上就要过年了,回顾这一年最大的收获就是技术有了很大的提升,其他的方面没有什么改变,现在还是单身小屌丝一枚. 这一年来学习的主要重点就是asp.net core,中间也使用 core+EF做 ...
- ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露
一.前言 在涉及到后端项目的开发中,如何实现对于用户权限的管控是需要我们首先考虑的,在实际开发过程中,我们可能会运用一些已经成熟的解决方案帮助我们实现这一功能,而在 Grapefruit.VuCore ...
随机推荐
- ts基础(1)
// let num:number = 12; // let boo:boolean = true; // let str:string = "adfd"; // str = 'a ...
- 用Java为Hyperledger Fabric(超级账本)编写区块链智能合约链代码
编写第一个 Java 链代码程序 在上一节中,您已经熟悉了如何构建.运行.部署和调用链代码,但尚未编写任何 Java 代码. 在本节中,将会使用 Eclipse IDE.一个用于 Eclipse 的 ...
- Error【0002】:YUM本地源配置问题
1.1 问题背景 通过VMware workstation创建虚拟机,在虚拟机的CDROM设备中,装载操作系统镜像.然后通过mount -o loop的方式,将CDROM设备挂载到系统的/mnt/cd ...
- java代码之美(12)---CollectionUtils工具类
java代码之美(12)---CollectionUtils工具类 这篇讲的CollectionUtils工具类是在apache下的, 而不是springframework下的CollectionUt ...
- asp.net core系列 61 Ocelot 构建服务发现简单示例
一.概述 Ocelot允许指定服务发现提供程序,如Consul或Eureka. 这二个中间件是用来实现:服务治理或秒服务发现,服务发现查找Ocelot正在转发请求的下游服务的主机和端口.目前Ocelo ...
- 带着新人看java虚拟机07(多线程篇)
这一篇说一下比较枯燥的东西,为什么说枯燥呢,因为我写这都感觉很无聊,无非就是几个阻塞线程的方法和唤醒线程的方法... 1.线程中断 首先我们说一说怎么使得一个正在运行中的线程进入阻塞状态,这也叫做线程 ...
- 如何提高使用Java反射的效率?
前言 在我们平时的工作或者面试中,都会经常遇到“反射”这个知识点,通过“反射”我们可以动态的获取到对象的信息以及灵活的调用对象方法等,但是在使用的同时又伴随着另一种声音的出现,那就是“反射”很慢,要少 ...
- 一行代码实现数组去重(ES6)
ES6中新增了Set数据结构,类似于数组,但是 它的成员都是唯一的 ,其构造函数可以接受一个数组作为参数,如: let array = [1, 1, 1, 1, 2, 3, 4, 4, 5, 3]; ...
- 性能超前,详解腾讯云新一代Redis缓存数据库
背景 当前内存数据库发展迅速,用户对于存储系统的要求也越来越高,为了满足各类业务场景的需要,腾讯云设计了新一代的内存数据库,不但保留了原来系统的高性能,高可用等特性,同时还兼容了当前流行的Redis原 ...
- ADO.NET 基础学习笔记1
1. ODBC.OLEDB.ADO.ADO.NET之间的关系 ODBC: 开放数据库互连(ODBC)是MICROSOFT提出的数据库访问接口标准.ODBC(Open DatabaseConnectiv ...