.Net Core全面解析_asp.net Core框架全面解析
目录
1.Asp.Net Core之前后端传值
1.1 Asp.netCore之控制台启动项目
2.Asp.Net Core之核心套路组件形式组装整个项目 不再是.netfrom全家桶形式
3.Asp.Net Core 之Log4Net日志组件扩展,cmd启动程序
4.Asp.Net Core 之 理解新管道模型
5.Asp.Net Core 之Startup.Configure Use(组件化解析)
6.Asp.Net Core 之依赖注入+asp.net core IOC容器与autofac容器解析 IOC容器的生命周期 以及Ui层实现依赖注入
7.Asp.Net Core 之AOP思想_通过MVC自带的Filter+Attribute实现自定义异常捕获 实现 方法级别 控制器级别 全局级别捕捉异常
8.Asp.Net Core 之读取配置文件
9.Asp.Net Core 之自动义过滤操作,
10.Asp.Net Core 之用户登录退出,使用UseAuthentication自带过滤器进行鉴权
11.Asp.Net Core 之网站访问前给http头部添加信息
.netcore能跨平台的原因:
asp.netcore(内置Kestrel=主机,) 只要安装core sdk环境就有Kestrel sdk环境在哪里 就有Kestrel 就可以执行core程序 这也是能够跨平台的原因
.Net core .Net 5 源码解读 执行的源码解读
//1.程序启动的时候,得到一个最小的IHostBuilder(主机),包含的是最基本的配置,专门用来生成最基础的Host; //2.通过【 webBuilder.UseStartupProgram.cs()】里面的不同的扩展,扩展IHostBuilder,每一层扩展都是在之前的基础上,进一步封装相关配置(套娃模式); //3. 就可以通过扩展把我们自己的写的配置给替换到默认配置上去;包括指定请求来了以后的处理过程; //4.Build方法执行后,所部分配置都给执行,得到一个WebHost;把WebHost所需要的 包含基础的服务,IOC容器; //5.用WebHost.Run();启动起来,把Kestrel启动起来,绑定端口,把服务启动起来;应装配了所有的环节! //Http请求进来—Kestrel监听---启动一个线程--包装context上下文—调用application ////// 其实我们所谓的aspnetcore是一个控制台; /// public class Program { /// /// 程序的入口 /// /// public static void Main(string[] args) { //1.程序启动--CreateHostBuilder(创建一个主机Kestral) //2.调用build 方法的到一个主机 //3.主机开始运行 var builder = CreateHostBuilder(args); //1.创建默认主机的建造者 IHost host = builder.Build(); //2.build一下 host.Run();//3.主机开始运行 //什么是主机:例如:IIS //主机运行是为了执行我们自己定义的代码;代码在哪儿?其实集成到主机中去了; } /// /// 这个类其实就是相当于程序运行前需要的一些基础的初始化配置,或者自己在里面增加一些配置 /// /// /// /// public static IHostBuilder CreateHostBuilder(string[] args) { //var host = Host.CreateDefaultBuilder(args); //Microsoft.Extensions.Hosting.HostBuilder IHostBuilder build = Host.CreateDefaultBuilder(args); //创建默认主机的建造者; var builder2 = build.ConfigureLogging(loggbuild => { loggbuild = loggbuild.AddLog4Net("CfgFile/log4net.Config"); }); ///配置logging(指定使用Log4net) var builder3 = builder2.ConfigureWebHostDefaults(webBuilder => //配置一个默认的Web主机 { webBuilder.UseStartup (); //如何配置? 配置全交给Startup来完成; }).UseServiceProviderFactory(new AutofacServiceProviderFactory()); //build.ConfigureServices() return build; } }
发送一个http请求请求到asp.net Core的经历
1.浏览器发送http请求
2.DNS服务器解析域名确定IP+Port(端口号-确定是那个程序) IP+port确定具体服务器和具体程序程序
3.IIS下 core怎么运行的:
1.http请求到IIS (主机,core就是寄宿在上面运行)
2.IIS拿到请求转发给asp.net core module
3.请求再给 Kestrel
4.kestrel的请求最终到代码里面
4.Core程序代码已经得到了http的请求了 响应的过程就是一个http请求处理的管道
5.Core开始响应 (就是一个控制台应用程序)http请求走 Program.cs Main方法,创建一个web主机,执行 Startup.cs(配置管道环节)
7.startp.cs里面的配置先走完,然后http请求根据Configure里面配置的管道环节 最终走到也是Configure里面配置的MVC路由
8.页面请求走完!
startp.cs里面的方法都是在运行时调用的,和静态构造函数一样执行且执行一次
startp.cs>Configure(配置管道环节)>定义的IApplicationBuilder参数类 里面的Build方法就是得到一个Http请求的委托
.use就是把 【按需增加的相关服务】放到一个集合中。 在Build的时候 循环集合把委托遍历出来,层层包装成一个多层嵌套委托:俄罗斯套娃一样
然后HTTP请求开始走这个俄罗斯套娃
这就是 Core的管道模型,和以前的.net fromwork管道模型区别在于
net Core管道模型:一个是根据程序按需增加相关环节,
net fromwork管道模型:一个http请求必须走完固定的19个环节
"javascript:document.getElementById('logoutForm').submit()">注销 } } else {
- class="nav navbar-nav navbar-right">
- @Html.ActionLink("登录", "Login", "Fourth", routeValues: null, htmlAttributes: new { id = "loginLink" })
"en"> "utf-8" /> "viewport" content="width=device-width, initial-scale=1.0" />_Layout模板页@ViewData["Title"] - Client "stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" /> "stylesheet" href="~/css/site.css" /> class="container">@RenderSection("Scripts", required: false)"main" class="pb-3"> @RenderBody()
4.其他控制器鉴权加过滤器
11.Asp.Net Core 之网站访问前给http头部添加信息
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) { app.Use(next => { Console.WriteLine("This is middleware 1"); return new RequestDelegate( async context => { //不能与MVC同时使用因为Response中间件在用了,MVC就不能去修改删除 //await context.Response.WriteAsync("This is Hello World 1 start"); //这样就可以使用 await Task.Run(() => Console.WriteLine("12345678797989")); context.Response.OnStarting(state => { var httpContext = (HttpContext)state; httpContext.Response.Headers.Add("middleware", "12345");//给http头部添加信息 return Task.CompletedTask; }, context); await next.Invoke(context); }); });Startup
startp.cs