.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.UseStartup()】里面的不同的扩展,扩展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;
        }
    }
Program.cs

发送一个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" })
} _LoginPartial分部页

"en">

    "utf-8" />
    "viewport" content="width=device-width, initial-scale=1.0" />
    @ViewData[<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Title</span><span style="color: rgba(128, 0, 0, 1)">"</span>] - Client
    "stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
    "stylesheet" href="~/css/site.css" />


    
class="container">
"main" class="pb-3"> @RenderBody()
@RenderSection("Scripts", required: false)
_Layout模板页

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