B/S C/S
B/S:
浏览器端:JavaScript,HTML,CSS
服务器端:ASP(.NET)PHP/JSP
优势:维护方便,易于升级和扩展
劣势:服务器负担沉重
C/S
java/.NET/VC系列
优势:客户端响应速度快
劣势:系统可扩展性和可维护性差
企业级应用系统几层架构
2,3,N
.NET定义
新平台+标准协议+统一开发工具
.NET核心组件
一组创建互联网操作系统的构建块
构建和管理新一代服务的基本结构和工具
能够启用新型智能互联网设备的.NET设备软件
.NET Framework三个主要组成部分
公共语言运行时(CLR)作用:负责整个.NET执行期间的代码管理工作
服务框架
两类应用模版(传统Windows应用程序模版和基于ASP.NET面向web的应用程序模版)
asp.net定义
继ASP后推出的全新动态网页制作技术
.NET Standard 和框架的区别
.NET Standard只是规范,一个.NET Standard类库可以被.NET Framework,.NET Core等引用,而.NET Framework类库则不可以。所以编写一个公用类库,尽量选择低版本.NET Standard
.NET Framework和.NET Core 区别
.NET Framework:无法独立部署,ASP.NET与IIS深度耦合,不能跨平台
.NET Core:支持独立部署,不依赖IIS,能跨平台
.NET开发工具
.NET CLI:命令行
Visual Studio:只Windows
Visual Studio for Mac
VS Code(Visual Studio Code):跨平台
Nuget命令
安装:Install-Package XXX -version(把依赖组件都下载了)
卸载:Uninstall-Package XXX
更新到最新版:Update-Package XXX
get post 区别
GET:用于获取或查询信息,数据放到URL后,通过Request.QueryString来获取变量值,提交数据大小有限制
POST:用于更新信息,数据放在http包的body中,通过Request.Form来获取变量值,提交数据大小无限制
program.cs作用
此文件中的会创建一个带有预配置默认值的 WebApplicationBuilder,向DI 容器添加 Razor Pages 支持,并生成应用
三种常见的方法可以使用 ASP.NET Core 构建新式 Web UI
服务器控件:从服务器呈现UI的应用
浏览器控件:在浏览器的客户端呈现UI的应用
混合:利用服务器和客户端UI呈现方法的混合应用
依赖注入作用
1.控制器或Razor页面不使用具体类,仅使用他的接口。可以实现更改时,无需修改控制器和页面
2.减少类之间依赖,提高模块独立性
3.让开发者更容易编写单元测试
中间件是什么
中间件是一种在应用管道中处理请求和响应的软件。
(每个中间件组件:选择是否将请求传到管道下一个组件,可在管道下一个组件前后执行
中间件在B/S模式下功能层作用)
中间件用法
app.use
app.run
C#
C#语言概述-CSDN博客
泛型
一组或一类事物的特性
列表
Contains
字典
ContainsKey
队列 栈
Enqueue
Peek
Dequeue
Push
Pop
Peek
LINQ
概念:LINQ是直接将查询功能集成到C#语言的技术统称。
功能:可以简化数据查询
using System.Linq
方法语法
查询语法
orm概念
通过操作C#对象方式来操作数据库。
Entity Framework Core(EF Core)
EF Core 是ORM框架,适用于.NET的新式对象数据库映射器。
核心组件
DbContext
派生自DbContext的类
EF Core提供程序
数据库提供程序
迁移 反向工程
基本命令
反向工程:管理器控制台的Scaffold-DbContext命令
或者用命令行接口(CLI)的dotnet ef dbcontext scaffold命令
迁移:创建迁移 dotnet ef migrations add 迁移名
更新数据库 dotnet ef database update
变更模型 dotnet ef migrations add 迁移名
定义数据库和模型
数据库根据一个派生自DbContext的类建模。这个类包含一个或多个DbSet<T>的类
customer类描述了Custmoers表中数据
注入连接字符串(不考)
在定义的数据库中重写OnConfiguring,并在其中的UseSqlServer(“连接字符串”)
对不同环境下使用不同连接字段串
同时设置配置文件读取该字符串,用该配置文件来设置 UseSqlServer,这样就可以满足一个连接字符串可以在不同环境下使用
注入dbcontext对象
方法一:直接将当前数据库上下文添加到DI子系统中,从而能在应用程序的任何地方获取该对象,并进行配置作用域为当前请求
方法二:自己创建数据库上下文实例,根据需要为他们分配生存期,并在上下文注入连接字符串
EF Core查询
单次查询
多次查询
方法一
用透明事务将查询结果连接
方法二
方法三
添加
删除
异步作用
可以避免性能瓶颈并增加应用程序的总响应能力
原理
async方法会被C#编译器编译成一个类,会根据await调用切分成多个状态,对async调用会被拆分成MoveNext的调用。
MVC概念
是一种使用了MVC(模型-视图-控制器)设计创建Web应用程序的模式,同时提供了对HTML,CSS和JavaScript的完成控制
三个组件
模型:表示应用程序核心。处理应用程序数据逻辑
视图:展示数据
控制器:处理用户交互
传统路由
显式路由参数
隐式路由参数
特性路由
其思想是,不是在应用程序启动时显式定义一个路由表,而是用专用的路由特性修饰控制器方法。路由特性将在内部填写系统的路由表
控制器获取数据
从Request获取数据
存在问题:需要知道从什么地方获取值,如URL,查询字符串等,用不同API进行访问
任何值都返回字符串,需进行类型转换
从RouteData获取数据
模型绑定
只关注控制器方法收到的数据,忽略数据的获取和来源
默认模型绑定器
任何传入的请求都会经过内置的绑定器对象,对应与DefaultModeBinder类的实例。试图在请求上传的任何数据中找到匹配名称。
绑定基本类型
在请求上下文获取数据,绑定器会寻找可行值,寻找命名值的匹配,如果没有匹配,则参数异常或返回默认值,命中则自动绑定
强制从给定来源绑定
FromQuery ,FromRoute,FromForm强制匹配固定词,如果没有就使用声明的默认值。
匹配city=London,如果没有city=London,则使用声明的默认值
绑定复杂类型
传送容器类
筛选器分类
操作筛选器
可以通过重写筛选器内方法来决定调用该方法前后做什么
授权筛选器:确定发出请求用户是否有权限发出
资源筛选器:在管道其余部分之前以及管道组件之后运行
操作筛选器:控制器方法操作之前和之后运行
异常筛选器:发生未处理异常时触发
结果筛选器:结果执行之前和之后运行
筛选器可以有同步和异步实现
提供HTML
终止中间件提供HTML(通过算法完成)
终止中间件是处理请求的一段代码
即一个处理http请求的函数。代码可以做任何操作,浏览器把他作为HTML呈现
从控制器提供HTML内容
在操作方法中提供纯文本(通过算法完成)
Razor模版(通过模版完成)
用视图引擎(调用View)将Razor渲染成HTML
封装了Razor模版和视图模型对象(封装了数据)
调用视图引擎
视图引擎负责从视图(一般是C#加上HTML混合)创建HTML
View方法
视图是一个Razor文件,在View文件夹下
model指出模版中使用数据类型,以生成HTML
ViewResult 对象
将Razor模版名称,母版页视图和视图模型打包成实现IActionResult接口对象。类名为ViewResult
当调用ExecuteResultAsync,触发视图引擎生成HTML
综合应用
视图引擎会将视图模版(模板中的占位符将被替换为计算出的数据)和控制器传入数据混合,并进行HTML创建
模版是引擎指定语言(如Razor)
传入数据则封装到字典或强类型对象
控制器和视图引擎生成视图原理
控制器
控制执行流之后,保存一个HTML文本字符串,然后用HTML MIME类型修饰文本后,控制器返回这个文本字符串
视图引擎
视图引擎被触发后,会读取对应的模板文件,并将控制器提供的数据填充进去,得到完整HTML后将其返回
向视图传递数据
通过@inject指令实现依赖注入(不考)
使用内置字典ViewData
Controller基类提供Viewdata属性,该属性自动刷新到动态创建的RazorPage<T>类实例
意味着控制器ViewData存储任何值都可在视图使用,不用人为操作
使用内置字典Viewbag
使用强类型视图模型类
强类型视图模型类表现更好
razor
基本语法
指令
@using 在编译上下文添加一个命名空间
@inherits 生成Razor视图对象使用实际基类
@model 向视图传递数据类的类型
@inject 在视图上下文注入指定类型的实例,该类型绑定到给定属性名
部分题目
正确
Request.Query["uid"]
MSIL