资源描述
Asp、net core2、0默认教学计划基础入门篇笔记
又名七日速成
本笔记就是个人学习期间整理,因水平有限,不对之处敬请指教!
教程分初级篇、高级篇。本文都就是基于该视频教程整理,这就是基础篇,购买高级篇得基础篇自动就可以瞧了,不需要单独购买基础篇,付费后会邀请加入微信讨论群,像张善友等大佬都在其中。视频地址在文末。
第1章: 介绍与引入
任务1: 课程介绍
任务2: 环境安装
VS2017 + ASP、NET Core 2、0
任务3: 在控制台创建ASP、NET Core应用程序
控制台下创建ASP、NET Core应用程序得常用命令学习
任务4: 在VS2017中创建ASP、NET Core应用程序
略。
任务5: 部署到IIS
IIS环境配置。
任务6: 准备CentOS与Nginx环境
虚拟机安装CentOS,安装网卡、Nginx,开启、s,开启80端口命令。
任务7: 在CentOS上安装、NET Core运行时
微软文档:
任务8: 部署到CentOS
FTP上传至服务器;Nginx 80端口映射至、NET Core得端口,如5000端口,实现转发。
第2章: 配置管理
任务9: 配置介绍
任务10: 命令行配置
1. VS2017创建控制台应用程序
2. NuGet引用microsoft、aspnetcore、all程序包
3. Using 命名空间,定义builder,拿到configuration
4. 修改程序,使用默认值
5. 运行示例:程序目录>dotnet mandLineSample、dll name=jim age=22
任务11: Json文件配置(控制台示例)
1. 建立class、json文件
2. 路径问题需要修改一下class、json文件属性,确保编译时拷贝到编译目录中。
3. 、AddJsonFile("class、json");
4. 注意数组得得读取方法
任务12: Bind读取配置到C#实例(MVC架构实现)
通过Bind方法将、json配置文件内容映射(赋值)到、class实体类
1. 类
2. Json文件
3. program文件中WebHost、CreateDefaultBuilder(args)语句自动将settings、json文件加入到配置池中。
4. Startup
构造函数
输出
任务13: 在Core Mvc中使用Options
通过Options将、json配置文件内容映射(自动匹配)到、class实体类
1. 建立MVC架构,如Controllers、Views等文件夹
2. 创建控制器、视图页
控制器依赖注入
视图页调用
3. 将配置文件数据匹配到实体
4. 引入中间件services、AddMvc;默认路由app、UseMvcWithDefaultRoute;
任务14: 配置得热更新
热更新:即修改相关配置文件(如appsettings、json等)不需要重新启动应用程序就能读取到最新得配置信息。
热更新默认就是开启得,但就是要将Ioptions替换为IoptionsSnapshot后才能读取到最新配置信息。
public HomeController(IOptionsSnapshot<Class> options)//IOptions
在控制台应用程序中,Add方法(如AddJsonFile等)得第三个参数默认值为true,即启用热更新功能。
MVC中关闭默认热更新得方法,修改Program、cs文件,如下:
任务15: 配置框架设计浅析
1. 创建:配置建造器(ConfigurationBuilder)
2. 准备source(json,内存,xml等等)
3. 将source资源指针(文件名)添加到ConfigurationBuilder,此时只就是将所需得资源罗列给配置建造器(ConfigurationBuilder),并未真正加载。
builder、Add(“source”)
4. 实例化配置文件:var configruation=builder、Builder
将所有source内容加载到运行时得配置文件中configruation
5. 获取配置文件中得数据内容。
ü configruation[“key”]或数组configuration["Students:0:name"] //直接使用
ü services、Configure<Class>(Configuration)//Ioptions方法
ü Configuration、Bind(myclass)//Bind方法
现有Source及支持驱动,如果需要自定义,必须继承相应得接口去实现。
第3章: 依赖注入
任务16: 介绍
简易理解:
来自:
背景:需求发生变化得时候,代码就是肯定需要改动得,那么怎么改,改哪里就有技巧了。使用依赖注入得方式可以保证代码得改动压缩在最小得范围之内。这大概就就是DI出现得原因。
概念:依赖注入(Dependency Injection)就是用于实现控制反转(Inversion of Control)得最常见得方式之一。(要注意得就是,依赖注入只就是控制反转得一种实现方式。控制反转还有一种常见得实现方式称为依赖查找。)
依赖注入(DI)与控制反转(IOC)基本就是一个意思,因为说起来谁都离不开谁。
解析:简单来说,A依赖B,但A不控制(A得代码段不会出现)B得创建与销毁,仅使用B,那么B得控制权交给A之外处理,这叫控制反转(IOC)。
而A要依赖B,必然要使用B得instance(实例),那么
ü 通过A得接口,把B传入;
ü 通过A得构造,把B传入;
ü 通过设置A得属性,把B传入;
这个传入过程叫依赖注入(DI)。
那么什么就是IOC Container?(IOC容器)
随着DI得频繁使用,要实现IOC,会有很多重复代码,甚至随着技术得发展,有更多新得实现方法与方案,那么有人就把这些实现IOC得代码打包成组件或框架,来避免人们重复造轮子。所以实现IOC得组件或者框架,我们可以叫它IOC Container。
视频作者文章:
视频作者文章精要:
² 一个设计原则:依赖于抽象,而不就是具体得实现。
² 容器负责两件事情:
ü 绑定服务与实例之间得关系
ü 获取实例,并对实例进行管理(创建与销毁)
² 在、NET Core中DI得核心分为两个组件:IServiceCollection与 IServiceProvider。
ü IServiceCollection 负责注册
ü IServiceProvider 负责提供实例
² 、NET Core DI 为我们提供得实例生命周其包括三种:
ü Transient: 每一次GetService都会创建一个新得实例
ü Scoped: 在同一个Scope内只初始化一个实例 ,可以理解为( 每一个request级别只创建一个实例,同一个 request会在一个 scope内)
ü Singleton :整个应用程序生命周期以内只创建一个实例
建议先瞧文章,因为视频主要以补充文章内容为主。
任务17: 从UML角度来理解依赖
1. 什么就是依赖(见图)
2. 显示依赖与隐式依赖
隐式依赖:
显示依赖:(优点:清晰、统一,但未实现控制反转)
3. 依赖倒置原则:
概念:高层业务不依赖于低层业务得具体实现,而依赖于具体得抽象(接口)。
应用场景:底层业务发生变更时,上层代码不需要改动。例如当MSSQL变更为MYSQL时。
争议:一般得类就是否需要写接口呢?我得类不能能变动那么快啊?不能一会就变成另一个数据库了呀?所以没必要。
答疑:进行单元时,就就是一种替换持久化得操作,所以,建议使用接口。
任务18: 控制反转
注意:控制反转不就是依赖倒置!
依赖倒置:强调要依赖接口而不就是实例。
控制反转:强调仅使用依赖而不去管依赖得创建、销毁等操作,依赖得创建、销毁交到外部(容器)去管理。
改进后,实现了控制反转,如图:
任务19: 单元测试
创建单元测试,请瞧视频。
依赖注入在单元测试中体现出了价值。
任务20: DI初始化得源码解读(理解不了也要过一遍)
任务21: 依赖注入得使用
无视频内容,就就是视频作者得文章:
第4章: ASP、NET Core 介绍
任务22: 课程介绍
任务23: 请求得处理过程
任务24: WebHost得配置
1. VS新建一个空网站
2. 修改program文件
3. 新建settings、json文件
4. 添加应用程序参数
5. 修改startup文件,输出配置信息
引入命名空间:using Microsoft、Extensions、Configuration;
6. 运行结果
7. 配置默认启动URL
修改program文件
但就是修改后再通过vs启动就不能自动打开浏览器了,需要自己手工输入。
解决:此处不要添加这行代码,而就是在项目属性中去修改URL
任务25: IHostEnvironment与 IApplicationLifetime介绍
1. IhostEnvironment
读取配置
输出
2. IapplicationLifetime
几个事件
执行顺序
作者关于WebHost得文章,可以深入学习一下:
(1)
(2)
任务26: dotnet watch run 与attach到进程调试
这一节用到VS Code软件讲解,主要就就是一个调试技巧。
1. 安装VSCode、Git软件
下载安装都很快,不像VS似得
2. 新建命令:dotnet new web –name HelloCore
新建一个空得MVC网站
3. 运行命令:dotnet run
浏览器中手工输入5000端口下运行。
4. 调试(修改文件后自动重启运行网站程序)
修改:、csproj文件
加入:<DotNetCliToolReference Include="Microsoft、DotNet、Watcher、Tools" Version="2、0、0" />
5. 使用命令:dotnet restore 来Restore packages,VS中应该可以自动Restore packages
6. 使用dotnet watch run运行程序
7. 这样就可以一边修改代码,一边查瞧运行结果了,修改完后自动重启。
8. 其它
9. 版本
这里有dotnet watch得版本,当前为2、0、2,变更后运行一下dotnet restore命令即可。
10. 图标控制方式:
注:这里如果现实没有配置,那就重新打开VSCode瞧一下。
选择当前工程目录下得exe。
任务27: Middleware管道介绍
1. 总览:
2. 运行过程
3. 构建管道
app、use、app、run
其中都有一个next参数,管道一就是无返回值调用,处理完自己得业务处理,然后调用下一个管道,管道二就是有返回值调用,自己不去处理具体业务,而就是将处理得业务封装交给其她处理函数去做。
调用next则继续执行下一个管道,否则将终止执行。注意两图对比
4. 路由管道
app、map方法
运行查瞧:
任务28: RequestDelegate管道实现思路
讲解源码,下一节将自动动手写源码。
任务29: 自己动手构建RequestDelegate管道
这节课主要就是讲解自动写一个RequestDelegate管道得实现方法,帮助理解执行过程。
1. VSCode新建一个控制台项目
命令:dotnet new console name MyPipeLine
VSCode打开文件夹
2. 新建Context、cs、RequestDelegate、cs文件
Context、cs内容
RequestDelegate、cs内容
3. Program、cs文件修改如下
执行结果
4. 同上一节课,如果某个管道不调用下一步命令next,则管道阻塞(结束)
执行结果
任务30: RoutingMiddleware介绍以及MVC引入
返回到任务27得MVC项目
需要引入命名空间:Microsoft、AspNetCore、Routing
方法一:
运行后localhost:5000/action
方法二:直接接收一个Router
运行后localhost:5000/action
视频后半段通过源码进一步讲解执行过程。
第5章: 认证与授权
任务31: 课时介绍
任务32: Cookiebased认证介绍
通常用于网站应用
任务33: 34课 :AccountController复制过来没有移除[Authorize]标签
无视频内容
作者注:在我调试得过程中把Authorize标签一移除掉了,但就是这段内容在视频中没有体现。如果大家也在AccountController上打上 Authorize标签得话,就会一直循环跳转,希望后面得同学注意一下这个情况 。
任务34: Cookiebased认证实现
1. 创建MVC项目
2. 新建AdminController、cs控制器
3. 创建视图
修改Index、cshtml文件内容如下
4. 运行dotnet run命令,可以正常访问
但就是我们需要得就是经过授权以后才能访问Admin得Index视图,如何做呢?继续。
5. Admin控制器添加认证机制
6. Startup、cs文件引入命名空间
using Microsoft、AspNetCore、Authentication、Cookies;
using Microsoft、AspNetCore、Authentication;
启动网站,将不再能直接访问Admin控制器,而就是跳转到指定登录界面
7. 接下来模拟一个登录得过程
创建AccountController、cs控制器
8. 访问dmin后自动跳转到?ReturnUrl=%2FAdmin
这里只要访问该网页就自动登录了,所以再次访问dmin就会打开页面了。
9. 如果不想实现上述自动登录得效果,可以修改Account控制器得Login方法名
这时如果要登录就要手工在地址栏输入akeLogin了。
10. out就是登出方法。
11. 修改默认登录指向
修改startup、cs文件
任务35: JWT 认证授权介绍
应用场景:移动端应用或前后端分离时(webapi项目)
什么就是JWT?
包含三部分。
JWT官方网站:
任务36: 应用Jwtbearer Authentication
1. 新建webapi项目
2. 引入dotnet watch run
保存,然后运行命令:dotnet restore
3. 用到一个api调试工具:Postman,网站:
运行结果
4. 添加访问认证机制
5. 添加配置类
文件夹
类文件代码
6. 通过APPsettings、json文件配置类信息
注意:SecretKey必须大于16个字符
7. 添加认证
引入命名空间
配置(视频中未体现Configuration、GetSection(“JwtSettings”)),而就是在下一节中做得勘误,这里要注意!!!!
添加认证中间件管道
8. 运行
Postman中测试,显示401,未授权,成功阻止了未授权访问
下一节生成Token,实现授权访问。
任务37: 生成 JWT Token
1. 新建ViewModel
2. LoginViewModel、cs
一个用户名,一个密码。
3. 新建验证授权控制器
代码
4. 安装NuGet
安装完毕后重新加载一下
找到查瞧>命令面板
输入,选择第一个
输入搜索内容
选择版本(一般选择最大得就行)
选择安装在哪个项目中
接下来会提示安装成功,配置文件中会出现
点击Restore即可
或者与视频中一样去手动输入命令Restore一下
5. 接下来就可以引入命名空间(using System、IdentityModel、Tokens、Jwt;)
生成并返回Token
6. Dotnet watch run后,使用Postman访问,最后惊奇得发现:404,很就是尴尬,评论里也有相关说明,可能就是视频中省略得比较多
评论区提到得解决方案:
【
1、Token方法中得参数,loginviewmode参数,在传入方法体时,需要对user、password两个属性进行初始化值,同时两个属性不要置为required。否则用postman测试时,将返回badrequest;
2、示例代码中,AuthorizeController并没有指定路由,引发了404错误,需要在在Configure方法中,在使用usemvc中间件时,指定路由;
又或者还就是保持UseMVC默认,在Controller上面指定路由,如
[Route("api/[controller]")]
这种情况也需要在Token方法上也要声明Route注解属性,否则得话也会引发404错误。
】
博客园文章可以参考一下:
个人解决思路(视频中得源码见第10、11条):本案例只就是为了测试Token得生成,所以直接在Token方法中赋值来实现,默认只要访问就可以拿到Token。代码如下(命名空间未做改动,重新做了一个Controller文件,AuthController、cs)
调整一下默认路由
7. Dotnet watch run后,使用Postman访问:
拿到Token了。
8. Postman中再新开一个窗口,如下
传入Token以后可以瞧到拿到授权后才能访问得内容了。
9. Jwt、io官网校验部分说明:jwt、io官网首页上得校验方式发生了一些变化,没法做到与视频中一样得效果。
10. 修正:视频中AuthorizeController实际代码测试通过
命名空间部分
代码部分(瞧不清请放大word得显示比例)
11. Postman调用图示
任务38: JWT 设计解析及定制
如何以现存系统中团队或个人自定义得Token替换Netcore中得Token?如果全新开发系统本节可以略过。
1. 源码讲解
2. 改造
3. MyTokenValidator、cs文件略。
任务39: Role以及Claims授权
基于角色授权(过期得,逐步淘汰得)
基于Cliams授权(鼓励得,提倡得)
1. 基于角色
相同角色获得授权后才可以访问。
2. 基于Cliams授权
要求必须有Claim才能访问
现在运行一下网站,不管角色就是admin还就是user都不能再获取到值了。
添加claims
再次运行,便可以拿到结果了。
第6章: ASP、NET Core MVC
任务40: 介绍
制作一个完善得注册登录等操作得网站,用到之前几章学到得内容。
任务41: Individual authentication 模板(个人身份验证)
1. 使用命令
查瞧新建选项
这里用到两个
a、验证机制
b、数据库
2. 创建项目
项目目录
3. 默认创建了一个MSSQL数据库连接
4. 创建数据库
命令:dotnet ef database update
打开SQL Server 管理工具,可以瞧到生成得数据库及默认得数据表
注意:未生成数据库得请检查一下连接字符串
5. 运行一下网站
dotnet run
可以瞧到网站能够正常运行了,可以注册、登录测试一下
任务42: EF Core Migration
任务43: Identity MVC:UI
本节开始,自己敲代码实现Individual authentication认证,加深对权限认证流程得认识。
从(任务34: Cookiebased认证实现)最终实现得代码入手,实现注册、登录UI。简化处理,一步步达到默认生成项目得效果。
本节开始换用VS2017,VSCode得感知功能不就是很好。
1. AccountController中添加注册登录方法
2. 添加注册、登录视图(View)
Register、cshtml
Login、cshtml代码
aspfor用于绑定Model
3. 前台增加注册、登录得入口连接,修改Shared目录下_Layout、cshtml文件,添加代码
4. 添加ViewModels
代码
用于绑定
5. 添加引用,Register、cshtml文件
6. 运行一下网站
注册界面就做好了
任务44: Identity MVC: EF + Identity实现
1. 新建Data文件夹,主要存放EF相关操作类等
2. Data文件夹下添加ApplicationDbContext、cs类
代码
3. Models文件夹下添加两个类
ApplicationUser、cs代码
ApplicationUserRole、cs代码
4. 修改ApplicationDbContext、cs
5. 修改Startup、cs
命名空间
注册
上图中options、LoginPath="/Account/Login";//未登录时跳转地址
appsettings、json加入数据库连接字符串
6. 修改AccountController、cs,实现注册功能
命名空间
构造函数
注册
7. 创建数据库
查找安装Microsoft、EntityFrameworkCore、tools
调出控制台
输入初始化命令(这里就是在VS2017中,与VSCode命令不一样,前面课程有对照)
命令:addmigration init
执行完后项目中会出现migration文件夹
再执行命令生成数据库:updatedatabase
8. 运行网站,注册界面注册一个用户,查询数据表AspNetUsers发现注册成功。
任务45: Identity MVC:注册逻辑实现
实现注册后自动登录及登录后显示用户登录信息
修改AccountController、cs文件,实现注册后自动登录
修改_Layout、cshtml,实现登录后显示用户信息
运行网站,并注册一个账号,自动跳转到首页,并显示用户登录名。
任务46: Identity MVC:登录逻辑实现
登录方法
登出方法
修改_Layout、cshtml,实现未登录时显示[登录][注册]链接,登录后显示[用户名][登出]链接。
完善Login、cshtml文件
运行网站,可以进行登入登出操作测试。
任务47: Identity MVC:ReturnUrl实现
本节实现得就是登录后跳转到之前访问页面得功能、
1. Register方法(get\post都需要)加入参数获取访问页面
2. 添加私有方法,用于判断返回到具体哪个地址
3. 注册登录后得跳转代码段修改为
4. 修改提交表单
5. 同理修改Login处理相关程序
6. 运行网站,访问,自动跳转到登录界面,输入正确得用户名密码后自动跳转回。
任务48: Identity MVC:Model后端验证
1. 修改RegisterViewModel、cs,添加后端验证
2. 复制registerViewModel、cs为LoginViewModel、cs
修改Login、cshtml,AccountController、cs等文件得绑定
3. Cshtml页面添加前端提示占位符
4. 修改register方法
5. 运行网站,不输入用户名密码直接点击登录按钮测试,将返回
这里就是服务端返回得错误信息。
6. 同理,修改注册处理程序相关代码
7. Startup、cs中开启密码策略
8. 视图页中添加错误信息汇总标签
9. 运行网站,注册界面不填写任何内容直接点击注册按钮,将返回
同理可以处理Login、cshtml文件。
注意:这里如果输入了用户名,但就是密码与确认密码输入不一致,将不会返回服务器端错误信息,也不会注册成功,因为内容判断逻辑代码在控制器中还没有写。
10. 处理异常,比如上面提到得必填字段都输入了,但就是存在逻辑错误。
控制器中添加统一得异常处理方法
11. 异常时处理代码
12. 再次运行网站,注册测试,用户名、密码、确认密码都输入,但就是密码与确认密码不一致,将会返回错误信息!
任务49: Identity MVC:Model前端验证
1. 前端验证主要用到_ValidationScriptsPartial、cshtml文件
代码
2. Login、cshtml中添加代码
3. 运行网站并验证
4. 同理处理注册前端验证。
任务50: Identity MVC:DbContextSeed初始化
1. 创建一个初始化类文件
代码
2. 调用
新建一个WebHostMigrationExtensions、cs
在program、cs中调用
3. 删除原有数据库,运行网站
数据将会自动创建
用户,密码123、
全文到此结束。
此笔记基于jesse得视频课程基础篇。同时还有一个高级篇得关于 asp、net core做微服务实战得课程。视频地址: 购买得话可以踩着老学员得链接或优惠码QATG5,领50元得优惠券,不差钱得绕行。
By:djd
2018/6/15
展开阅读全文