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 ...
随机推荐
- BZOJ_1342_[Baltic2007]Sound静音问题_单调队列
BZOJ_1342_[Baltic2007]Sound静音问题_单调队列 题意: 给出n个数,求∑[ max{a[i]~a[i+m-1]} - min{a[i]~a[i+m-1]} <= c ] ...
- Spring mvc 上传进度条实现
以下的仅仅是学习而已,记录以下笔记 1 springmvc 进度条,要实现ProgressListener接口,实现方法update(long readLength, long contextLeng ...
- .net中的线程同步基础(搬运自CLR via C#)
线程安全 此类型的所有公共静态(Visual Basic 中为 Shared)成员对多线程操作而言都是安全的.但不保证任何实例成员是线程安全的. 在MSDN上经常会看到这样一句话.表示如果程序中有n个 ...
- linux 搜索某个系统命令的位置
Which命令 功能简述which命令的作用是在PATH变量指定的路径中搜索某个系统命令的位置并且返回第一个搜索结果.也就是说使用which命令就可以看到某个系统命令是否存在以及执行的到底是哪一个位置 ...
- Postman-----设置环境变量
1.环境变量的作用域: 使用环境变量(可用于切换开发环境/生产环境.设置动态参数),有4个作用域(优先级由高到低):Global, Environment, Local, Data.同名变量会使用优先 ...
- 《k8s 源码分析》- Custom Controller 之 Informer
Custom Controller 之 Informer 概述 架构概览 reflector - List & Watch API Server Reflector 对象 ListAndWat ...
- Redis介绍使用及进阶
目录: 一.介绍 二.缓存问题 三.Redis内存滥用 四.键命名规范 五.Redis使用场景 六.持久化操作 七..Net Core 使用redis 简单介绍 一.介绍 1. 高性能-- Redis ...
- DDD领域驱动设计理论篇 - 学习笔记
一.Why DDD? 在加入X公司后,开始了ASP.NET Core+Docker+Linux的技术实践,也开始了微服务架构的实践.在微服务的学习中,有一本微软官方出品的<.NET微服务:容器化 ...
- [开源]MasterChief 快速开发辅助类库
C# 开发辅助类库,和士官长一样身经百战且越战越勇的战争机器,能力无人能出其右. GitHub:MasterChief 欢迎Star,欢迎Issues: 项目架构思维导图: 目录 1. 数据库访问 2 ...
- 补习系列(19)-springboot JPA + PostGreSQL
目录 SpringBoot 整合 PostGreSQL 一.PostGreSQL简介 二.关于 SpringDataJPA 三.整合 PostGreSQL A. 依赖包 B. 配置文件 C. 模型定义 ...