.NetCore全⾯解析_aspCore框架全⾯解析
⽬录
1.1 AspCore之控制台启动项⽬
,cmd启动程序
IOC容器的⽣命周期以及Ui层实现依赖注⼊
实现⽅法级别控制器级别全局级别捕捉异常
core能跨平台的原因:
aspcore(内置Kestrel=主机,) 只要安装core sdk环境就有Kestrel sdk环境在哪⾥就有Kestrel 就可以执⾏core程序这也是能够跨平台的原因.Net core .Net 5 源码解读执⾏的源码解读
//1.程序启动的时候,得到⼀个最⼩的IHostBuilder(主机),包含的是最基本的配置,专门⽤来⽣成最基础的Host;
//2.通过【 webBuilder.UseStartup<Startup>()】⾥⾯的不同的扩展,扩展IHostBuilder,每⼀层扩展都是在之前的基础上,进⼀步封装相关配置(套娃模式);
//3. 就可以通过扩展把我们⾃⼰的写的配置给替换到默认配置上去;包括指定请求来了以后的处理过程;
//4.Build⽅法执⾏后,所部分配置都给执⾏,得到⼀个WebHost;把WebHost所需要的包含基础的服务,IOC容器;
//5.⽤WebHost.Run();启动起来,把Kestrel启动起来,绑定端⼝,把服务启动起来;应装配了所有的环节!
//Http请求进来—Kestrel监听---启动⼀个线程--包装context上下⽂—调⽤application
///<summary>
///其实我们所谓的aspnetcore是⼀个控制台;
///</summary>
public class Program
{
///<summary>
///程序的⼊⼝
///</summary>
///<param name="args"></param>
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
//主机运⾏是为了执⾏我们⾃⼰定义的代码;代码在哪⼉?其实集成到主机中去了;
}
///<summary>
///这个类其实就是相当于程序运⾏前需要的⼀些基础的初始化配置,或者⾃⼰在⾥⾯增加⼀些配置
///
///</summary>
///<param name="args"></param>
///<returns></returns>
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>(); //如何配置?配置全交给Startup来完成;
}).UseServiceProviderFactory(new AutofacServiceProviderFactory());
//build.ConfigureServices()
return build;
}
}
Program.cs
发送⼀个http请求请求到asp Core的经历
1.浏览器发送http请求
2.DNS服务器解析域名确定IP+Port(端⼝号-确定是那个程序) IP+port确定具体服务器和具体程序程序
3.IIS下 core怎么运⾏的:
1.http请求到IIS (主机,core就是寄宿在上⾯运⾏)
2.IIS拿到请求转发给asp 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的管道模型,和以前的 fromwork管道模型区别在于
net Core管道模型:⼀个是根据程序按需增加相关环节,
net fromwork管道模型:⼀个http请求必须⾛完固定的19个环节
1.创建Asp.Net Core⽹站项⽬是如何从后端传值到前端
base.ViewBag.User1 = "值1";
base.ViewData["User2"] = "值2";
base.TempData["User3"] = "值3";
object name = "值4";
return View(name);
后端控制器
@model System.String
asp查看源码配置ui@{
ViewData["Title"] = "Index";
}
<h1>Index</h1>
<h2>@base.ViewBag.User1</h2>
<h2>@base.ViewData["User2"]</h2>
<h2>@base.TempData["User3"]</h2>
<h2>@Model</h2>
前端接收值
1.1 AspCore之控制台启动项⽬
1.E:\微服务代码库\click\click\bin\Debug\netcoreapp3.1 在此路径下⾯启动cmd
3.把wwwroot⽂件夹复制到 bin\Debug\netcoreapp3.1 ⾥⾯去
2.Asp.Net Core以组件形式组装整个项⽬不再是from全家桶形式
实现套路,1.控制器使⽤,2.startup.ConfigureServices添加
1.控制器使⽤
2.startup.ConfigureServices添加需要在ConfigureServices添加session
3.Asp.Net Core使⽤Log4Net⽇志
第⼀种⽅式nuget添加log4net,Microsoft.Extensions.Logging.Log4Net.AspNetCore Program.cs添加
第⼆种⽅式:Starup.cs添加
后台控制器使⽤
第三步添加配置⽂件,设置始终复制,
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<!-- Define some output appenders -->
<appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
<file value="" />
<!--追加⽇志内容-->
<appendToFile value="true" />
<!--防⽌多线程时不能写Log,官⽅说线程⾮安全-->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!--可以为:Once|Size|Date|Composite-->
<!--Composite为Size和Date的组合-->
<rollingStyle value="Composite" />
<!--当备份⽂件时,为⽂件名加的后缀-->
<datePattern value="yyyyMMdd.TXT" />
<!--⽇志最⼤个数,都是最新的-->
<!--rollingStyle节点为Size时,只能有value个⽇志-->
<!--rollingStyle节点为Composite时,每天有value个⽇志-->
<maxSizeRollBackups value="20" />
<!--可⽤的单位:KB|MB|GB-->
<maximumFileSize value="3MB" />
<!--置为true,当前最新⽇志⽂件名永远为file节中的名字-->
<staticLogFileName value="true" />
<!--输出级别在INFO和ERROR之间的⽇志-->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ALL" />
<param name="LevelMax" value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
</layout>
</appender>
<root>
<priority value="ALL"/>
<level value="ALL"/>
<appender-ref ref="rollingAppender" />
</root>
</log4net>
第四步:访问程序
cmd启动⽅式:到程序bin\debug 输⼊cmd 打开命令模式:输⼊ dotnet WebApplication1.dll 运⾏,浏览器输⼊ localhost:5001/ 直接访问
4.asp core 管道模型解析
core和5 实际是⼀个控制台应⽤程序。请求管道模型
执⾏顺序就是:发送http请求>请求被Kestrel解析得到HttpContext->然后被后台代码处理Request>返回Response->经由Kestrel回发到客户端
所谓管道,就是拿着HttpContext,经过多个步骤的加⼯,⽣成Response,⽽这其实就是管道模型请求
所以Startup.Configure就是指定我们的代码如何去处理请求
这个Startup.Configure⽅法,叫请求级(所有请求⽣效,且只执⾏⼀次其实也就是初始化)----⽽页⾯级就是请求⼀个页⾯Home/Index
Startup.cs⾥⾯的⼏个⽅法都是在运⾏时调⽤的和静态构造函数⼀样,执⾏且执⾏⼀次
5.Startup.Configure⽅法 Use中间件源码解析通过中间件把请求交给MVC
Configure的核⼼其实就是IApplicationBuilder app这个参数
⽽⾥⾯需要实现的就是build⽅法:它的注释:构建此应⽤程序⽤来处理HTTP请求的委托。
⽽实现Build⽅法就是Use调⽤RequestDelegate(是⼀个委托) 接收⼀个HttpContext,执⾏相应的操作所以就让我们在⼀个http请求进⼊MVC前随意扩展定义
上⾯就是build源码解读
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论