IOC&DI&AOP
IOC控制反转:去掉依赖,方便扩展。【addsingleton】
DI依赖注入:构造A对象。能把A依赖的对象自动初始化,可以递归。【构造器注入】
AOP:面向切面编程,在不破坏封装的前提下去扩展功能,比如中间件或者特性(通过反射增强)
MVC中的AOP:
AOP的全局注册:
在Configuration中。通过
service.AddControllerWithView(
option=>option.Filters.Add(typeof(XXXFilterAttribute))
);
这种方式的是全局注册
或者通过特性的方式在方法和控制器上注册。则是方法注册和控制器注册
.NETCORE中的AOP,
1、【serviceFilter(typeof(CustomerFilterAttribute))】
(特性)
但是必须在startup中需要
addScope(CustomerFilterAttribute);
2、TypeFilter
【serviceFilter(typeof(CustomerFilterAttribute))】
3、IfilterFactory
4、全局注册
Filter的执行顺序![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6798325d4a1ac3a2a4fb48ba948d2a87.png)
Middleware-》Authorization filter-》Resourcefilter-》Exception-》Model binding -》Actionfilter(before)-Action execution-Action filter(After)-》ResultFilter
Resultexecution
Resourcefilter只能在方法的前后拦截到而不能进入方法内部
我们可以通过基于接口的IOC以及AOP去增强Action内部。
曾经的HTTP请求
Http请求都在一个HttpApplication中。以观察者模式的方式把22个事件全部按照顺序排序下来。
基于观察者模式。httpmodule完成了灵活的扩展,但是pay -for -all,
我们需要灵活的扩展。还要按需付费。,,我们就需要自己组装。所以有了NETCORE
按需加载。需要什么我们就添加什么。
app.use(next=>{cw();
return async c=>{
await cw("2");
}})
startup
使用什么中间件以及什么顺序使用
ConfigureService
用来注册服务
addSingleton<IXX,XX>();//单例模式(生命周期只有一个)
addTransient<IXX,XX>();//(每次一个请求都有一个新的)
addScoped<IXX,XX>();//(每次Web请求一个实例)
Configure
只运行一次。
配置相关的中间件。
app.useXXX();
HTTP请求处理的管道
ASP.NET Core 中间件的配置方法可以分为以上三种,对应的Helper方法分别是:Run(), Use(), Map()。
Run(),使用Run调用中间件的时候,会直接返回一个响应,所以后续的中间件将不会被执行了。
Use(),它会对请求做一些工作或处理,例如添加一些请求的上下文数据,有时候甚至什么也不做,直接把请求交给下一个中间件。
Map(),它会把请求重新路由到其它的中间件路径上去。
实际中呢,Use()这个helper方法用的最多。
program.cs
main方法的进入口
默认UseKestrel
IConfiguration接口
配置来源:
优先级从上到下。一级一级的加载。来覆盖之前的信息
- 命令行参数
- 环境变量(系统)
- User Secrets
- appsetting.*.json
- appsetting.json
管道和中间件
MVC
addmvc()在startup类的ConfigureService来注册mvc服务
usemvc()在startup类的Configure来使用MVC服务
路由Routing
Conventional Routing:按照约定进行路由
Attribute Routing:按照属性标签进行路由
Controller
IActionResult:决定返回给什么值、决定做什么事和真正做什么事情是分开的,会更加灵活。
XSS
不被信任的数据
html input
http headers
queryString
Attributes
防止XSS:
对HTML进行encoding
正则表达式
XSS第三方库
验证请求
CSRF
跨站请求
Header验证
同步令牌模式
双重提交cookie
【ValidateAntiForgeryToken】ASP.NETCORE默认
【AutoValidateAntiForgeryToken】All POST
【ValidateAntiForgeryToken】跳过某个请求
Binding来源
FromBody:RequestBodys
FromQuery:QueryString
FromHeader:REquestHeader
FromRoute
FromFrom
自定义验证
新建一个类然后继承Attribute 和IModelValidator两个,然后实现Validate这个方法
Remote远程验证
诊断中间件
UseDeveloperExceptionPage:返回错误信息
UseStatusCodePages:返回错误状态码(400-600)
UseExceptionHandler:返回自定义的错误页面
UseWelcode:返回欢迎页面
Filter
种类:
授权、资源、Action、异常、Result
实现
执行顺序
缓存
IMemoryCache(内存缓存)
StickSession,只能单机使用
分布式缓存(IDestributedCache)
RedisCache
RESPONSE缓存
基于Header
客户端缓存
使用REsponseCache这个Attribute