ASP.NET 启动和运行机制
2023-09-14 09:12:33 时间
原文网址: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>();
});
}
- Main:程序的起点,.Net Core 应用程序本质上是控制台应用程序
- CreateDefaultBuilder: 创建并配置WebHostBuilder, 首先调用CreateDefaultBuilder, 进行一系列配置。
- UseStartup:指定StartUp为启动配置文件。在StartUp中做两个重要的工作
- ConfigureServices方法是注册服务
- Configure方法是配置管道,用来具体指定如何处理每个http请求的, 例如我们可以让这个程序知道我使用mvc来处理http请求, 那就调用app.UseMvc()这个方法就行.
- BuildWebHost:生成WebHostBuilder并进行了一系列配置之后, 通过CreateHostBuilder(args)对象来Build出一个IHostBuilder。
- 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地址
相关文章
- asp.net 微信分享到朋友圈,分享给朋友接口
- .NET 纯原生实现 Cron 定时任务执行,未依赖第三方组件
- ASP.NET MVC商城网站后台管理系统
- .NET Core3.1 Dotnetty实战教程
- .net搭建ASP.NET应用程序在Linux系统上(linux搭建asp)
- ASP快速连接MySQL解决方案(asp如何连mysql)
- ASP搭配MySQL使用的缺点及解决办法(asp使用mysql缺点)
- ASP编程操作MySQL二进制字段(asp二进制mysql)
- ASP.NET高性能分页代码
- asp.net简易生成注册码(数字+大小写字母)
- asp.net(C#)动态添加非ASP的标准html控件(如添加Script标签)
- ASp.net文本框(TextBox)计算,判断输入的是否是数字
- asp页面和Asp.net页面传中文参数UrlEncode编码以及接收解码
- Asp.net在IIS上运行不了的解决方法
- asp.net下无法循环绑定投票的标题和选项的解决方法
- Asp.net控制Tomcat启动关闭的实现方法
- Asp.Net二级域名共享Forms身份验证、下载站/图片站的授权访问控制
- asp.net根据计算机MAC地址限定每台机子只能领取一次账号
- Asp.net中断点续传的原理与实现方法分享
- 基于ASP.NET的lucene.net全文搜索实现步骤
- 深入解析.NET许可证编译器(Lc.exe)的原理与源代码剖析
- asp.net中提示该行已属于另一个表的解决方法
- 在ASP.NET中插入flash代码实例
- ASP.NET实现页面传值的几种方法小结
- ASP.NET中URLRewrite的具体实现方法
- 在ASP.NET中支持断点续传下载大文件(ZT)源码
- 安装SQLserver2005出现警告32位ASP.NET已经注册,需要注册64位的解决方法