首页 > 编程语言 >ASP.NET 启动和运行机制

ASP.NET 启动和运行机制

时间:2023-01-29 21:47:45浏览次数:64  
标签:Core ASP logging args 中间件 运行机制 NET

原文网址:https://www.cnblogs.com/yuyue5945/p/14149168.html

ASP.NET Core

ASP.NET Core的运行机制

代理器

图示说明

1、Web server: ASP.NET CORE 提供两种服务器可用:kestrel and HTTP.sys

  • kestrel 是一个跨平台的Web服务器
  • HTTP.sys 只能用在Windows中

2、Internet : 广域网中,需要windows验证的时候,可以选择HTTP.sys

3、IIS、Apache、Nginx:反向代理服务器

ASP .NET Core 的启动

启动流程图如下

代理器

    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
  1. Main:程序的起点,.Net Core 应用程序本质上是控制台应用程序
  2. CreateDefaultBuilder: 创建并配置WebHostBuilder, 首先调用Create­DefaultBuilder, 进行一系列配置。
  3. UseStartup:指定StartUp为启动配置文件。在StartUp中做两个重要的工作
    • ConfigureServices方法是注册服务
    • Configure方法是配置管道,用来具体指定如何处理每个http请求的, 例如我们可以让这个程序知道我使用mvc来处理http请求, 那就调用app.UseMvc()这个方法就行.
  4. BuildWebHost:生成WebHostBuilder并进行了一系列配置之后, 通过CreateHostBuilder(args)对象来Build出一个IHostBuilder。
  5. Run:调用IWebHost的Run方法使之开始运行。

反向编译进入CreateDefaulBuilder方法中可以看到相重点关键字

        public static IHostBuilder CreateDefaultBuilder(string[] args)
        {
            HostBuilder hostBuilder = new HostBuilder();
            hostBuilder.UseContentRoot(Directory.GetCurrentDirectory());
            hostBuilder.ConfigureHostConfiguration((Action<IConfigurationBuilder>)(config =>
           {
               config.AddEnvironmentVariables("DOTNET_");
               if (args == null)
                   return;
               config.AddCommandLine(args);
           }));
            hostBuilder.ConfigureAppConfiguration((Action<HostBuilderContext, IConfigurationBuilder>)((hostingContext, config) =>
           {
               IHostEnvironment hostingEnvironment = hostingContext.HostingEnvironment;
               bool reloadOnChange = hostingContext.Configuration.GetValue<bool>("hostBuilder:reloadConfigOnChange", true);
               config.AddJsonFile("appsettings.json", true, reloadOnChange).AddJsonFile("appsettings." + hostingEnvironment.EnvironmentName + ".json", true, reloadOnChange);
               if (hostingEnvironment.IsDevelopment() && !string.IsNullOrEmpty(hostingEnvironment.ApplicationName))
               {
                   Assembly assembly = Assembly.Load(new AssemblyName(hostingEnvironment.ApplicationName));
                   if (assembly != (Assembly)null)
                       UserSecretsConfigurationExtensions.AddUserSecrets(config, assembly, true);
               }
               config.AddEnvironmentVariables();
               if (args == null)
                   return;
               config.AddCommandLine(args);
           })).ConfigureLogging((Action<HostBuilderContext, ILoggingBuilder>)((hostingContext, logging) =>
     {
               bool flag = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);
               if (flag)
                   logging.AddFilter<EventLogLoggerProvider>((Func<LogLevel, bool>)(level => level >= LogLevel.Warning));
               logging.AddConfiguration((IConfiguration)hostingContext.Configuration.GetSection("Logging"));
               logging.AddConsole();
               logging.AddDebug();
               logging.AddEventSourceLogger();
               if (flag)
                   logging.AddEventLog();
               logging.Configure((Action<LoggerFactoryOptions>)(options => options.ActivityTrackingOptions = ActivityTrackingOptions.SpanId | ActivityTrackingOptions.TraceId | ActivityTrackingOptions.ParentId));
           })).UseDefaultServiceProvider((Action<HostBuilderContext, ServiceProviderOptions>)((context, options) =>
     {
               bool flag = context.HostingEnvironment.IsDevelopment();
               options.ValidateScopes = flag;
               options.ValidateOnBuild = flag;
           }));
            return (IHostBuilder)hostBuilder;
        }

UseKestrel 指定服务器使用 Kestrel,若使用HttpSys,需使用UseHttpSys。
UseContentRoot 指定根目录
ConfigureAppConfiguration 读取配置文件
ConfigureLogging 配置日志处理程序
UseIISIntegration 将应用程序配置为在 IIS 中运行。如果应用程序没有使用 IIS 作为反向代理,那么 UseIISIntegration 不会有任何效果。因此,即使应用程序在非 IIS 方案中运行,也可以安全调用这种方法。
UseDefaultServiceProvider 设置默认的依赖注入容器。

ASP .NET Core 管道中间件

请求管道 处理http requests并返回responses的代码组成了request pipeline(请求管道).
中间件: 我们可以使用一些程序来配置请求管道(request pipeline)以便处理requests和responses. 比如处理验证(authentication)的程序, MVC本身就是个中间件(middleware).

当接收到一个请求时,请求会交给中间件构成的中间件管道进行处理,管道就是多个中间件构成,请求从一个中间件的一端进入,从中间件的另一端出来,每个中间件都可以对HttpContext请求开始和结束进行处理.

中间件

博主GitHub地址

https://github.com/yuyue5945

标签:Core,ASP,logging,args,中间件,运行机制,NET
From: https://www.cnblogs.com/bruce1992/p/17073881.html

相关文章

  • 用 VB6 检查Windows上有没有安装 .NET Framework
    '检查函数'若安装了.NETFramework,返回:TruePublicFunctionIsMSFrameworkInstalled()AsBooleanOnErrorResumeNextDimobjWMIServiceDimcolItemsDim......
  • k8s01 - 使用 kubeadm部署Kubernetes 1.26
    目录1准备1.1系统配置1.2配置服务器支持开启ipvs的前提条件1.3部署容器运行时Containerd2.使用kubeadm部署Kubernetes2.1安装kubeadm和kubelet2.2使用kubeadminit初......
  • Kubernetes监控手册06-监控APIServer
    写在前面如果是用的公有云托管的Kubernetes集群,控制面的组件都交由云厂商托管的,那作为客户的我们就省事了,基本不用操心APIServer的运维。个人也推荐使用云厂商这个服......
  • .net core 使用redis
    参照:.NET6使用Redis-Lulus-博客园(cnblogs.com)九、.netcore(.NET6)添加通用的Redis功能-WeskyNet-博客园(cnblogs.com)......
  • openwrt_imagebuilder_修改缺省配置_network_firewall_root密码
    openwrt_imagebuilder_修改缺省配置_network_firewall_root密码转载注明来源:本文链接来自osnosn的博客,写于2023-01-29.参考和方法【官方文档:使用ImageBuilder】......
  • 实现kubernetes基于ceph块存储和cephfs的数据持久化
      ceph对接k8s使用案例  k8s节点安装ceph-common  分别在k8smaster与各node节点安装ceph-common组件包。  下载ceph仓库key文件root@master1:~/yam......
  • Quartz.Net 官方教程(Jobs 和 Trigger)
    根据官网说明类型概述IScheduler调度类核心接口IJob独立实现业务逻辑需要继承的任务接口IJobDetail给任务接口定义实例的任务说明类接口ITrigger触......
  • springboot 怎么启动aop @EnableAspectJAutoProxy
    SpringBoot项目使用aophttps://blog.csdn.net/qq_39176307/article/details/124714191Spring-AOPSpringBoot自动配置和启动SpringAOPhttps://www.bbsmax.com/A/QV5ZX3......
  • .NET7后端框架:NLog
    前言继上一篇《.NET7后端框架:一句话启动》后,继续完善后端框架。查日志作为码农的日常,所以我们先引入日志包,这里我们使用NLog。添加依赖项添加包的方式有两种,一种是通......
  • 解决stackoverflow.com网站下cdn.sstatic.net加载慢
    使用ReplaceGoogleCDN解决stackoverflow.com网站下cdn.sstatic.net资源加载慢起因:打开https://stackoverflow.com/tags/socat/hot?filter=all又出现打开很慢的情况了,一......