从浅入深了解.NET Core MVC 2.x全面教程
一、基础
1.默认配置
- 使用Kestrel Web Server
- ASP.NET Core内置——跨平台
- IIS集成
- UseIIS()
- UseIISIntergration()
- Log
- IConfiguration接口
2.IConfiguration配置信息的来源
- appsettings.json
- User Serets
- 环境变量
- 命令行参数
- XML...
3.管道
4.MVC
5.路由Routing
- Concentional Routing
- Attribute Routing
6.返回View
- Razor引擎
- Controller——>ViewResult——>HTML页面
7.ViewModel
8.怎么使用Tag Helper
1.在【Views】文件夹中创建一个【Razor 视图导入】文件。
2.在这个文件中导入TagHelper
3.然后在视图中使用
9.输入的Model
- Form
- 导航到含有Form的View
10.ASP.NET Core MVC-Form
- Http Post
11.如何使用EF Core
1.先在【appsettings.json】文件中写上连接字符串,将"xxx"替换成自己对应的数据。
"ConnectionStrings": {
"DefaultConnction": "Server=xxx;Database=xxx;User Id=xxx;Password=xxx"
}
2.需要安装这些包。
3.写一个【TutorialDbContext.cs】类,该类需要继承自:DbContext
4.在【Startup.cs】文件中注入服务。
在【ConfigureServices】方法中。
5.使用EF Core进行迁移,在【程序包管理控制台】输入2个命令即可。
然后会生成2个文件
可以看到已经生成了这个数据库了
12.Partial View
- 复用View代码
- @Html.Partial("_PartialViewName",data)
- 没有自己的Model
- 可以嵌套
13.View Components的特点
- 可复用
- 独立的组件
- 有独立的逻辑/数据
- 相当于迷你MVC请求
- 不依赖于父级View的数据
14.在VS中如何使用NPM安装前端库
- 新建一个Npm配置文件
- 输入需要引入的库,比如我需要引入【Bootstrap】
- 可以看到已经安装好了。
- 这是物理文件路径。
- 让系统伺服这个文件夹。
15.使用前端做数据校验
- 引入Npm库
- 在项目中引入刚刚导入的库
- 然后前端自动起作用了(最好使用CND,速度快)
16.如何在不同的环境引入不用的库
如果CND无法访问,挂了;就加入这个回落机制。
判断Bootstrap
17.ASP.NET Core Identity
- 身份验证和授权系统
- 成员管理
- 默认使用MS SQL
- 支持外部的Provider
18.如果有多个DbContext,需要指定某一个。
19.Claim
- 一部分信息
- Name-Value
- 可以来自内部或外部
- 基于策略的(Policy)
20.Prolicy策略
- 注册policy
- 使用policy进行授权
21.Policy内置的方式
- RequireAuthticatedUser:必须登录用户
- RequireClaim:要求特定的Claim和值
- RequireRole:要求特定的角色
- RequireUserName:要求特定的用户名
22.Policy自定义
- ReuireAssertion
- AddRequirements
- IAuthorizationRequirement
- AuthorizationHandler<TIAuthorizationRequirement-实现IAuthorizationRequirement接口>
- AuthorizationHandler<TIAuthorizationRequirement-实现IAuthorizationRequirement接口>
- ...
- 如果一个Handler返回了Succeed,而其他的都没有返回Fail,那么这个Requirement就被满足了。
- IAuthorizationRequirement
23.XSS
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
24.不被信任的数据
- HTML input
- HTTP Headers
- Query strings
- Attributes,EXIF 信息
25.怎么防止XSS?
- HTML Encoding:>变成$gt; <变成 <
- Razor默认开启了HTML Encoding,但是可以手动关闭
- 正则表达式
- 反XSS的第三方库
- 对请求进行验证
26.内置的编码器
- HtmlEncoder
- JavaScriptEncoder
- UrlEncode
27.CSRF(跨站请求伪造)
28.OWASP的CSRF防范方案
- Header验证:请求头
- Synchronizer Token Pattern :用户每次请求时携带Token
- Double Submit Cookie:双重Cookie
29.ASP.NET Core
- [ValidateAntiForgeryToken]:针对一个Action
- [AutoValidateAntiForgeryToken]:针对所有的Post
- [IgnoreAntiForGeryToken]:取消
30.Model Binding
- Model Binding允许我们用HTPP请求里的数据类创建C#对象,这个对象就是Action方法的参数。
- 可以使用一下类型用来Model Binding:
- int,string等简单数据类型
- 复杂类型对象
- 数组
31.Model Binder可以绑定哪些值?
- Form的值(Body中的POST请求)
- 路由的值
- QueryString的值(URL地址后的参数)
32.Binding Attributes
- Bind:有选择行的绑定属性
- BindNver:可以放在Model对象一个属性上,表示不应该进行绑定
- BindRequired:必须进行绑定,在验证的过程中不绑定就报错误
33.例子
1.在【ViewModel】中有一个嵌套属性。
2.在【View】视图中世界嵌套属性.属性。
3.在【Controller】中。
有选择的绑定属性,这个特性一般放在【Acion方法中】
[BindNever]放在ViewModel中。
34.指定Binding的来源,这是特性
- [FromBody]:RequestBodys——请求的Body
- [FromQuery]——QueryStrings
- [FromHeader]:Request Headers——请求头找属性
- [FromRoute]——路由
- [FromForm]——表单的值
35.自定义验证Attribute?
1.新建一个类,这个类需要继承【Attribute】,需要实现【IModelValidator】接口。
36.远程调用-特性
- [Remote]-客户算调用Action方法进行验证。
【在前端直接调用后台方法进行验证。】
ViewModel
Controller
View
37.Tag Helpers
- Tag Helpers是服务器中的C#代码,他在Razor文件里,他会参与到创建和渲染HTML元素过程。
- 和HTML Htlpers类似。
- 跟HTML的命名规范一致。
- 内置了很多Tag Helpers,也可以自定义。
38.JavaScript Tag Helpers
- asp-src-include:导入文件,如:javascript
- asp-src-exclude:将不想加入的文件加入
- asp-fallback-src:回落机制(调用不到了[asp-src-include]文件然后就调用这个中的)
- asp-fallvack-test:具体的
39.CSS Tag Helpers
40.其他的Tag Helpers
41.环境相关的Tag Helpers
42.自定义的TagHelpers
1.继承Tag Helpers父类,实现(Override) Process这个方法。
2.注册Tag Helpers
3.视图中
4.最后生成
5.1如果我想添加一个属性,以“-”分割大小写
5.2在这个类中添加一个属性
6.1如何直接使用下面这种方法实现上面的内容?
6.2使用【异步】的方式
7.1如果想添加一个既做为【属性】又作为【元素】的TagHelpers?
7.2代码
指定目标元素,"或"的关系,只要符合其中一种即可。
8.1如果我想添加一个颜色?
8.2添加一个属性,名称可以不一致,添加一个特性即可。
9.1如果改成类?
9.2设置属性、设置Attribute。
43.Tag Helper前缀
//加上前缀就起作用了,不加上就不起作用。
44.View Component
- 显示部门内容
- Mini Controller
- 可复用
- 只能配合父级Virew使用。
45.View Component分成两步
- 首先需要继承ViewComponent父类
- 实现Invoke()方法
- 也可以是异步的:InvokeAsync()
- 返回IViewComponentResult
- 也可以是异步的:InvokeAsync()
二、Logging
1.诊断中间件
- 命名空间:Microsoft.AspNetCore.Diagnostics
- 报告信息并处理异常
2.诊断中间件
- UseDeveloperExceptionPage:开发时使用的异常页面,异常信息
- UseStatusCodePages:返回状态码:400-600
- UserExceptionHandler:指定异常处理器
- UseWelcome:当网站还在建设中
3.ASP.NET Core里的Log系统
- EventSource
- ILogger
- DiagnosticSource
4.ILogger
- 基于Providers
- 内置
- 可扩展使用其他的,或自己构件
5.内置的Log Providers
- Console:控制台
- Debug:VSDebug窗口
- EventSource
- EventLog:写到Windows事件中
- TraceSource:只能应用于完整的.NET Frameword
- Azure App Service
6.Log等级(低级——>高级)
- Trace
- Debug
- Information
- Warning
- Error
- Cirtical
7.添加日志信息
第一个参数是EventID,写一个常量就行;
第二个参数是要记录的日志信息;如果有2个参数就继续往后写就行了;
不建议这么写,写在一起就提出不来了;
8.第三方 Log Provider
- Serilog
- Nlog
- Elmah
9.怎么在ASP.NET Core中使用Serilog?
- 在NuGet中安装【Servilog.AspNetCore】
//如果需要输出到控制台
//输出到文件
- 在【Program.cs】文件中Main方法中进行配置。
- 在【Program.cs】文件中CreateWebHostBuilder方法中进行使用。
三、Filter
1.Filter
- 用于MVC
- 可以在MVC的请求管道里添加逻辑
- 之前、之后
- Cross-cutting concerns:灌穿特性
- 避免代码重复
- 常用场景
- 授权
- 需要Https
2.MVC管道
3.Filter种类
- AuthorizationFilter:鉴权授权
- ResourceFilter:资源过滤器
- ActionFilter:行为方法过滤器
- ExceptionFilter:异常过滤器
- ResultFilter:结果过滤器
4.实现Filter
- IFilterMetadata
- IAtuorizationFilter,IAsyncAuthorizationFilter
- IResourceFilter
- IActionFilter
- IExceptionFilter
- IRestleFilter
5.应用Filter
- Action
- Controller
- 全局
四、缓存
1.缓存的优点?
- 提高网站的访问速度
- 适用于不易改变的数据
2.缓存的缺点?
- 仔细规划
- 奇怪的副作用
3.缓存的地点?
- 服务器
- 缓存服务器
- 客户端
4.In-Memory缓存
- 内存缓存
- IMemoryCache
- 适用于Sticky Seesion(使用单机服务)
- 适用于任何类型的对象
5.MemoryCacheEntryOptions
- Absolute expiration time:绝对过期时间
- Sliding expiration time:可调的过期时间
- 缓存优先级
- PostEvictionDelegate
6.怎么使用缓存?
- 现在【Sartup.cs】的【ConfigureServices】方法中注册缓存:
- 定义一个常量,用来做Key
- 构造函数依赖注入缓存
- 使用缓存
7.Cache Tag Helper
- @await Component.IncokeAsync("xxx")
- 服务器端
- 使用IMemoryCache
- Sticky Session
8.Cache Tag Helper属性
- Enabled:是否启用
- expires-on:绝对的过期时间
- expires-after:时间长度
- expires-sliding:可调的过期时间
- vary-by-header:请求
- vary-by-query
- vary-by-cookie
- vary-by-user
- vary-by
- priority:优先级设置
9.分布式缓存_1
10.分布式缓存_2
- 无需Sticky Seesion
- 可扩展
- 服务器重启不会缓存
- 性能更好
11.分布式缓存的接口名、方法?
- IDistributedCache
- Get,GetAsync
- Set,SetAsync
- Refresh,RefreshAsync
- Remove,RemoveAsync
12.分布式缓存有哪几种?
- 分布式Memory Cache:只适合开发时应用
- 分布式 Sql Server Cache
- 分布式 Redis Cache:实际中使用这个最多
13.怎么使用Readis分布式缓存?
- 安装Redis(使用Docker安装)
连接、运行Redis
- 在VS项目中安装Redis
- 在【Startup.cs】的【ConfigureService】方法中进行注入。
- 在Controller中构造函数依赖注入
- 使用分布式缓存
14.Response缓存(响应缓存、客户端缓存)
- 基于Header
- 客户端缓存
- 使用ResponseCache这个Attribute
15.Reponse缓存参数?
- Location:设置缓存在哪
- Duration:设置缓存时间的长短
- NoStore:不应该设为缓存
- VaryByHeader:设置通过检查哪个Header的值决定缓存
16.如何使用Reponse缓存?
- 在【Startup.cs】注册Reponse缓存
- 在控制器中写代码;
也可以使用之前注册的
17.压缩
- 压缩传输的数据:1k以上的数据,如CSS、JS等可以进行压缩;
如何使用呢?
(1)在【Program.cs】中【ConfigureServices】方法中注册服务
(2)在【Program.cs】中【Configure】使用服务
没介绍完,看文档...
五、VSTS(后改名:Azure DevOps)
1.Azure DevOps
- Saas
- 完整的DevOps的解决方案
- 与技术无关
- 基于Azure
- 集成开发团队的环境
2.Azure DevOps组件
- 源码控制
- 计划
- CI
- 发布管理
- 测试
- ...
3.CI-Continuouts Integeration(持续集成)
4.Azure Devops -CI
- Build连接到测试,工作项...
- 宿主代理
- 针对报告
- 支持多种语言凭他
原文链接:https://www.cnblogs.com/kimiliucn/p/17611047.html
从浅入深了解.NET Core MVC 2.x全面教程的更多相关文章
- 浅入深出之Java集合框架(上)
Java中的集合框架(上) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架 ...
- 浅入深出之Java集合框架(中)
Java中的集合框架(中) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架 ...
- 浅入深出之Java集合框架(下)
Java中的集合框架(下) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,哈哈这篇其实也还是基础,惊不惊喜意不意外 ̄▽ ̄ 写文真的好累,懒得写了.. ...
- 浅入深出Vue:环境搭建
浅入深出Vue:环境搭建 工欲善其事必先利其器,该搭建我们的环境了. 安装NPM 所有工具的下载地址都可以在导航篇中找到,这里我们下载的是最新版本的NodeJS Windows安装程序 下载下来后,直 ...
- 浅入深出Vue:工具准备之PostMan安装配置及Mock服务配置
浅入深出Vue之工具准备(二):PostMan安装配置 由于家中有事,文章没顾得上.在此说声抱歉,这是工具准备的最后一章. 接下来就是开始环境搭建了~尽情期待 工欲善其事必先利其器,让我们先做好准备工 ...
- 浅入深出Vue:工具准备之WebStorm安装配置
浅入深出Vue之工具准备(一):WebStorm安装配置 工欲善其事必先利其器,让我们先做好准备工作吧 导航篇 WebStorm安装配置 所有工具的下载地址都可以在导航篇中找到,这里我们下载的是最新版 ...
- 浅入深出Vue系列
浅入深出Vue导航 导航帖,直接点击标题即可. 文中所有涉及到的资源链接均在最下方列举出来了. 前言 基础篇 浅入深出Vue:工具准备之WebStorm搭建及配置 浅入深出Vue之工具准备(二):Po ...
- 浅入深出Vue:前言
浅入深出Vue系列文章 之前大部分是在做后端,后来出于某些原因开始接触Vue.深感前端变化之大,各种工具.框架令人眼花缭乱.不过正是这些变化,让前端开发更灵活. 博主在刚开始时,参考官网的各个步骤以及 ...
- 『浅入深出』MySQL 中事务的实现
在关系型数据库中,事务的重要性不言而喻,只要对数据库稍有了解的人都知道事务具有 ACID 四个基本属性,而我们不知道的可能就是数据库是如何实现这四个属性的:在这篇文章中,我们将对事务的实现进行分析,尝 ...
- 浅入深出Vue:第一个页面
今天正式开始入门篇,也就是实战了~ 首先我们是要做一个博客网站,UI 框架采用江湖传闻中的 ElementUI,今天我们就来利用它确定我们博客网站的基本布局吧. 准备工作 新建一个vue项目(可以参考 ...
随机推荐
- Node + Express 后台开发 —— 上传、下载和发布
上传.下载和发布 前面我们已经完成了数据库的增删改查,在弄一个上传图片.下载 csv,一个最简单的后台开发就已完成,最后部署即可. 上传图片 需求 需求:做一个个人简介的表单提交,有昵称.简介和头像. ...
- 解决PaddlePaddle飞桨在迁移学习使用预训练模型时更改num_classes参数出现警告
当我们使用 PaddlePaddle 进行迁移学习的时候,直接导入模型虽然是可以的,但是总是会有个警告 如直接用官方的 resnet101 并加载预训练模型的话 model = paddle.visi ...
- 2022-08-09:以下go语言代码输出什么?A:否,会 panic;B:是,能正确运行;C:不清楚,看投票结果。 package main import ( “fmt“ “syn
2022-08-09:以下go语言代码输出什么?A:否,会 panic:B:是,能正确运行:C:不清楚,看投票结果. package main import ( "fmt" &qu ...
- Python潮流周刊#1:如何系统地自学Python?
这里记录每周值得分享的 Python 及通用技术内容,部分内容为英文,已在小标题注明.(本期标题取自其中一则分享,不代表全部内容都是该主题,特此声明.) 文章&教程 1.编程语言的错误处理模式 ...
- 深度学习基础入门篇[8]::计算机视觉与卷积神经网络、卷积模型CNN综述、池化讲解、CNN参数计算
深度学习基础入门篇[8]::计算机视觉与卷积神经网络.卷积模型CNN综述.池化讲解.CNN参数计算 1.计算机视觉与卷积神经网络 1.1计算机视觉综述 计算机视觉作为一门让机器学会如何去"看 ...
- ENVI手动地理配准栅格图像的方法
本文介绍在ENVI软件中,手动划定地面控制点从而实现栅格图像相互间地理配准的方法:其中,所用软件版本为ENVI Classic 5.3 (64-bit). 首先,在软件中同时打开两景需要进行地 ...
- Spring框架参考手册(4.2.6版本)翻译——第三部分 核心技术 6.10.8 提供带注解的限定符元数据
6.1.1 提供带注解的限定符元数据 在第6.9.4节"使用@Qualifier微调基于注解的自动装配"中讨论了@Qualifier注解.该部分中的示例阐释了,在解析自动装配候选者 ...
- CSR格式如何更新? GES图计算引擎HyG揭秘之数据更新
摘要:HyG图计算引擎采用CSR格式来存储图的拓扑信息,CSR格式可以将稀疏矩阵的存储空间压缩,进而大大降低图的存储开销,同时具备访问效率高.格式易转化等优点. 本文分享自华为云社区<CSR格式 ...
- Maven资源大于配置问题
资源大于配置问题 <!--pom.xml中在build中配置resources,来防止我们资源导出失败的问题--> <build> <resources> < ...
- 前端Vue自定义简单通用省市区选择器picker地区选择器picker 收获地址界面模版
前端Vue自定义简单通用省市区选择器picker地区选择器picker 收获地址界面模版,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin ...