本文地址:https://www.cnblogs.com/oberon-zjt0806/p/12215717.html
注意:本篇大量地使用了mermaid绘制图表,加载需要较长的时间,请见谅

[TOC]

O 前请提要

在第1期中,我们通过一个简单的过程构建了一个ASP.NET的初始项目,当然,实际上这个项目也是一个.NET Core的项目。因为在第2期中我们提到过,.NET Core的项目本身就基于.NET Framework基础之上扩展的。
构建一个项目的过程如下:

这里有图,请稍等片刻

graph LR
install(安装dotnet)
create(创建WebApp项目)
edit(编辑代码)
trust(信任开发证书)
run(运行项目)

install==>create==>edit==>trust==>run

但是,这只是站在一种不透明的视角下对ASP.NET Core的宏观开发过程进行的一次概览和简单尝试,我们实际上并不清楚ASP.NET的内部构造和运作机理。

I Web的诸视角

I.1 用户视角

可以很负责任的说,实际上Web在用户眼里就是这些东西:一个鼠标+一个键盘+一个浏览器

是的,用户只需要使用浏览器输入网址,只要运气够好的话(比如网络通信没有问题或者远端也没什么问题的话)用户稍等片刻就可以看到目标的页面。用户还可以在这个页面下搞些小动作,比如填个表单啥的。当然,如果不够走运的话用户还可能在下午茶的时间享受着美味的404错误以及一份做工精致的错误提示页。

这个视角就是所谓的不透明视角,因为只能看到表面上的页面,后面干什么了我们并不清楚,对于用户而言,他们也不需要清楚,是吧?

I.2 浏览器视角

是的,很明显用户把所有事情都交给浏览器去做了,浏览器在面上提供给用户界面(我们称之为前端),用户操作了一番,点了一个提交按钮。

为了让用户在本地上的这些自嗨行为具有网络上的意义,浏览器在应用层上要对用户的输入加以处理,用户产生的信息就这样从应用层坐电梯一路下到网络层再下到数据链路层把被发送出去。

graph LR
user(用户)
browser(浏览器)
network>网络]
user--操作/数据-->browser--请求报文-->network

如果说的再确切一些:

graph LR
user(用户)
pages[页面]
script[浏览器脚本]
network>网络]

subgraph 浏览器
pages
script
script--浏览器响应/前端响应/控制-->pages
pages--页面内容-->script
end

user--操作/数据-->pages--请求报文-->network

I.3 服务器视角

历经若干转发、代理、可能还包含的重定向等,从浏览器发出的请求信息终于到了服务端手里,服务端自然要开始处理数据并反馈用户所需要的数据,当然了这也就意味着服务端由两部分构成:

graph LR
subgraph Server
data(数据源)
service("服务程序")
end
data--数据-->service

实际上用户在浏览器中访问某个URL得到的页面的数据来源也是服务器(这部分数据称为响应(Response)),也就是说,Web应用实际上的处理流程是这样的:

graph RL
user(用户)
browser(浏览器)
service(服务程序)
data("数据<br>(文件、数据库、...)</span>")

subgraph Client
user
browser
end

subgraph Server
service
data
end

user--访问URL/操作-->browser--URL请求数据-->service--数据操作-->data--数据-->service--响应包-->browser--渲染-->user

II ASP.NET Core的角色

上面是一个Web应用程序中各个单位的运作流程,那么在一个ASP.NET的WebApp中ASP.NET Core在其中位于一个什么样的位置呢??
在前端,ASP.NET Core不再使用传统的控制器和视图cshtmlController类)来表示一个前端页面,取而代之的是使用Razor页面。Razor是ASP.NET使用的一种页面标记语言,Razor使得页面在能够正确的被解析为浏览器可识别的HTML数据的同时允许页面内嵌入C#或VB代码来控制界面的动态显示(类似于JSP或者PHP)。此外,在.NET Core 3.x中又引入了Blazor前端框架来替代JS配合Razor完成前端的交互控制。而用户将请求发送至服务端时,请求会经过ASP.NET Core提供的请求处理管道上挂载的各中间件(Middleware)进行处理,处理的请求数据移交至服务并决定是否从后端获取数据。后端数据的获取是通过Entity Framework Core(EFCore)数据访问框架与数据库之间进行交互实现的。

graph LR
client(Client)
server(Server)

subgraph "ASP.NET Core请求处理管道"
mid1[Middleware1]
mid2[Middleware2]
midetc[...]
end

client --> mid1 --> mid2 --> midetc --> server
server --> midetc --> mid2 --> mid1 --> client

subgraph Client
user(用户)
browser(浏览器)

subgraph "ASP.NET Core Razor"
razorpage[Razor Pages]
blazor[Blazor]
end

razorpage-->browser
blazor-->browser
browser-->user
user-->browser
browser-->blazor
end

subgraph Server
service(服务)
data(数据)
subgraph "ASP.NET Entity Framework Core"
efc(EFCore)
end
service-->efc-->data
data-->efc-->service
end

II.1 Razor??又中间件??还有EFCore??这都是什么跟什么啊??

不必着急,我们这一部分只是为了简单了解一下一个ASP.NET Core的WebApp的实际工作流程,这些详细的内容我们会在接下来的若干期里分别了解。

II.2 我了解过三层架构开发模式,他们都对应着什么呢??

其实ASP.NET Core采取的开发方式仍然是MVC,MVC和三层架构之间确实还是有一定区别(主要是业务逻辑和数据之间耦合程度的差异)。
不过多数情况下,其实MVC和三层架构的主要思想还是一致的,那就是将服务端划分为三块。

如果将ASP.NET Core套入三层架构的解释方式中,那么就是:

三层架构 ASP.NET Core
表示层 Razor Pages/Blazor
业务逻辑层 请求处理管道
数据访问层 Entity Framework Core

III 准备动手

截止到目前为止我们从原理上了解了ASP.NET的运作过程,那么在我们第1期创建的那个初始项目中,这些东西都是如何体现的呢??

To be continued...

初探ASP.NET Core 3.x (3) - Web的运作流程和ASP.NET Core的运作结构的更多相关文章

  1. 002.Create a web API with ASP.NET Core MVC and Visual Studio for Windows -- 【在windows上用vs与asp.net core mvc 创建一个 web api 程序】

    Create a web API with ASP.NET Core MVC and Visual Studio for Windows 在windows上用vs与asp.net core mvc 创 ...

  2. 开始使用ASP.NET Core - 创建第一个Web应用

    .NET Core 是.NET Framework的新一代跨平台应用程序开发框架,是微软在一开始发展时就开源的软件平台,由于 .NET Core 的开发目标是跨平台的 .NET 平台,因此 .NET ...

  3. ASP.NET Core MVC中构建Web API

    在ASP.NET CORE MVC中,Web API是其中一个功能子集,可以直接使用MVC的特性及路由等功能. 在成功构建 ASP.NET CORE MVC项目之后,选中解决方案,先填加一个API的文 ...

  4. 如何使用ASP.NET Core、EF Core、ABP(ASP.NET Boilerplate)创建分层的Web应用程序(第一部分)

    本文是为了学习ABP的使用,是翻译ABP官方文档的一篇实战教程,我暂时是优先翻译自己感兴趣或者比较想学习的部分,后续有时间希望能将ABP系列翻译出来,除了自己能学习外,有可能的话希望帮助一些英文阅读能 ...

  5. 为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 webservice/API

    2018 .NET开发者调查报告: .NET Core 是怎么样的状态,这里我们看到了还有非常多的.net开发人员还在观望,本文给大家一个建议.这仅代表我的个人意见, 我有充分的理由推荐.net 程序 ...

  6. Do You Kown Asp.Net Core -- Asp.Net Core 2.0 未来web开发新趋势 Razor Page

    Razor Page介绍 前言 上周期待已久的Asp.Net Core 2.0提前发布了,一下子Net圈热闹了起来,2.0带来了很多新的特性和新的功能,其中Razor Page引起我的关注,作为web ...

  7. ASP.NET Core 入门教程 1、使用ASP.NET Core 构建第一个Web应用

    一.前言 1.本文主要内容 Visual Studio Code 开发环境配置 使用 ASP.NET Core 构建Web应用 ASP.NET Core Web 应用启动类说明 ASP.NET Cor ...

  8. asp.net core 3.0获取web应用的根目录

    目录 1.需求 2.解决方案 1.需求 asp.net core 3.0的web项目中,在controller中,想要获取wwwroot下的imgs/banners文件夹下的所有文件: 在传统的asp ...

  9. 【asp.net core】实现动态 Web API

    序言: 远程工作已经一个月了,最近也算是比较闲,每天早上起床打个卡,快速弄完当天要做的工作之后就快乐摸鱼去了.之前在用 ABP 框架(旧版)的时候就觉得应用服务层写起来真的爽,为什么实现了个 IApp ...

随机推荐

  1. Java语言中使用OpenMP

    从去年年中,开始学习Java,主要是维护公司用Java编写的服务器软件.目前,该服务器软件遇到一个问题,在下载大文件时,如果同时下载的用户很多, 服务器软件工作会出现异常,有的用户无法下载.服务器硬件 ...

  2. HTML常用布局

    一般的局部布局无非采用如下的技术: 1)div + ul(ol)-li:用于分类导航或菜单等场合     2)div + dl-dt-dd:用于图文混编场合     3)table-tr-td:用于图 ...

  3. Kobjects, Ksets 和 Subsystems

    Kobject 是基础的结构, 它保持设备模型在一起. 初始地它被作为一个简单的引用计数, 但是它的责任已随时间增长, 并且因此有了它自己的战场. struct kobject 所处理的任 务和它的支 ...

  4. Weblogic/WAS之Full GC监控与计算

    在网上看到关于内存回收机制,同大家一起分析探讨.堆内存划分为Eden.Survivor 和 Tenured/Old 空间,如下图所示: Minor GC 会清理年轻代的内存,Major GC 是清理老 ...

  5. Team Foundation Server 2015使用教程【1】:团队项目创建

  6. ABP-多个DbContext实现事物更新

    1.在ABP中其实多个DbContext并没有在同一个事物中执行,那他是如何操作的,我的理解是 在不使用事物的时候 把多个DbContext存放在ActiveDbContexts 在调用工作单元的时候 ...

  7. 我的 2019 年 Python 文章榜单

    现在是 2020 年的第一天,我相信从昨天开始,各位的信息流里肯定充斥了各式各样的年度盘点/回顾/总结/记录之类的内容.虽然来得稍晚了,但我还是想给诸位送上这一篇文章. 我将在本文中列出自己于 201 ...

  8. 深入ReentrantLock的实现原理和源码分析

    ReentrantLock是Java并发包中提供的一个可重入的互斥锁.ReentrantLock和synchronized在基本用法,行为语义上都是类似的,同样都具有可重入性.只不过相比原生的Sync ...

  9. CentOS 下 maven 安装

    获取maven安装包 wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.2.5/binaries/apache-maven-3.2.5-bi ...

  10. Kerrigan:配置中心管理UI的实现思路和技术细节

    去年写过一篇文章『中小团队落地配置中心详解』,介绍了我们借助etcd+confd实现的配置中心方案,这是一个对运维友好,与开发解耦的极佳方案,经过了一年多的实践也确实帮我们解决了配置文件无版本.难回滚 ...