本文地址: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. Intellij IDEA 如何使用Jrebel热部署

    My Jrebel 已经不再提供免费使用了,或使用破解版Jrebel 或可以移步至 HotSwapAgent,或使用破解的Jrebel. 一个java web项目,在写的过程中我们需要不断调试,如果没 ...

  2. windows服务器运维日常--防火墙打开后ping不通

    1. 打开防火墙,有利于安全 2. 添加80端口,支持互联网访问:添加3389端口,以支持远程桌面连接 3. 发现开了防火墙之后,ping不通网址www.mjywxy.xin 4. 查找资料和测试发现 ...

  3. linux 手动睡眠

    在 Linux 内核的之前的版本, 正式的睡眠要求程序员手动处理所有上面的步骤. 它是一 个繁琐的过程, 包含相当多的易出错的样板式的代码. 程序员如果愿意还是可能用那种方 式手动睡眠; <li ...

  4. CSS---cursor 鼠标指针光标样式(形状)

    url 需使用的自定义光标的 URL. 注释:请在此列表的末端始终定义一种普通的光标,以防没有由 URL 定义的可用光标. default 默认光标(通常是一个箭头) auto 默认.浏览器设置的光标 ...

  5. C++ 图片格式转化和压缩

    在做人脸识别底库图片导入的时候,需要支持主流的图片的格式,如jpeg.bmp.png等格式.所以需要对图片进行格式转化.图片过大的话,还有进行缩放等.本文介绍的是利用cximage开源库,来进行对图片 ...

  6. oracle中update语句修改多个字段

    如需要修改下列数据:表名为student 一般会这样写: update student set sname = '李四', sage = 20, sbirthday = to_date('2010-0 ...

  7. 我的 2019 年 Python 文章榜单

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

  8. DOCKER学习_008:Docker容器的运行最佳实践

    一 容器分类 容器按用途大致可分为两类: 服务类容器,如 web server. database等 工具类容器,如cur容器, Iredis-cli容器 通常而言,服务类容器需要长期运行,所以使用 ...

  9. 小白进阶之路-python格式化输出

    1.不使用格式化前:传值时比较麻烦而且不精确. 2.格式化输出后,%代表先占个位,s代表字符串,%s代表这里之后会传一个字符串类型的值,%s其实可以接受任意类型的值:%d传入的值要求必须是数字. %s ...

  10. Vue-cli2.0

    本文的学习来自技术胖大神的教程:https://jspang.com/ Vue-cli是vue官方出品的快速构建单页应用的脚手架 开发一个项目,在开始的时候,会构建项目结构.webpack.怎么运行. ...