注册的服务器和中间件共同构成了ASP.NET Core用于处理请求的管道, 这样一个管道是在我们启动作为应用宿主的WebHost时构建出来的。...的创建 几个常用的扩展方法 一、WebHost 顾名思义,WebHost被作为Web应用的宿主,应用的启动和关闭都是通过启动或者关闭对应WebHost的方式来实现的。...依赖注入只要体现在:ASP.NET Core框架以及应用程序会根据需要注册一系列的服务,这些服务会在WebHost启动的时候被用来创建一个ServiceProvider对象,管道在进行请求处理过程所需的任何服务对象都可以从这个...接下来我们就来着重聊聊WebHost在开启过程中都做了些什么。总的来说,WebHost的整个开启过程大体上可以分为如下三个步骤: 注册服务:获取Startup对象并利用它完成服务的注册。...在服务器被成功开启之后,我们利用ApplicationLifetime对外发送应用启动的通知。
启动项目 ?...启动项目 ?...,可以看到class.json被复制到bin\Debug目录,这样dll就可以读取到class.json文件 ?...在Controllers文件夹右键,添加一个控制器,默认,HomeController 在Home文件夹右键,添加一个视图,默认,Index 在Startup.cs中注释掉这一段代码,不然会把整个管道提交...实现原理 对比控制台程序JsonComfigSample的Program读取配置文件 // 第二个参数表示文件不存在时是否抛异常 // 第三个参数表示配置文件更新的时候是否重新加载
,在讲应用系统的启动的时候说过,配置是在Program文件的CreateDefaultBuilder方法中被加载的,可以在其之后继续通过ConfigureAppConfiguration方法继续设置。...,第三个设置当此文件被修改后,是否自动重新加载该文件。...三、命令行 通过命令行启动应用的时候,可以在命令行中通过添加Key-Value的方式作为配置的数据来源,例如执行如下命令启动应用: dotnet run key1=value1 key2=value2...四、环境变量 在WebHost.CreateDefaultBuilder(args)方法中,除了会加载命令行参数,还会加载环境变量中的数据。此处的环境变量包括系统的环境变量,例如下图2 ?...除了读取系统的环境变量,也可以在项目的属性中添加,例如在项目的属性中添加,例如下图3: ?
在本篇文章中,我来讲一讲如何利用WebHost来加载配置文件和设置启动的Url 在前面的文章中讲过,ASP.Net Core应用程序会自动加载appsettings.json中的配置文件,那么如果配置文件不是写在...新建后,因为首先添加一个名为json的json文件,文件内容如下: { "connectionString": { "defaultConnectionString": "server=127.0.0.1...下面我们介绍利用webHost修改启动的url 其实很简单,只需要再Pragram.ca中修改以下代码: public static IWebHost BuildWebHost(string[]....UseStartup() .Build(); 那么该网页就会再8080端口开始侦听了 ,要注意的是,修改之后,程序启动后不会自动调用默认浏览器打开该网页...该项目完整的github地址:https://github.com/liuzhenyulive/WebHost 有任何疑问可以再文章下方给我留言
我们在模拟管道中将这个接口作了如下的简化,仅仅保留了用于启动当前WebHost的Start方法。随着WebHost因Start方法的调用而被开启,整个管道也随之被建立起来。...WebHost在启动的时候需要将整个管道构建出来,管道创建过程中所需的所有信息都来源于作为创建者的WebHostBuilder,后者采用“依赖注入”的形式来为创建的WebHost提供这些信息。...除了向创建的WebHost提供一个ServiceProvider之外,WebHostBuilder还需要将一些配置提供给WebHost,配置数据的设置可以通过调用UseSetting方法来完成。...在启动服务器之前,我们必须为它指定相应的监听地址。...在调用Start方法启动服务器的时候需要指定一个HttpApplication对象作为参数,后者代表由所示注册中间件构成的管道,它可以通过调用ApplicationBuilder的Build方法创建出来
Configure 方法:创建应用的请求处理管道 它们都在应用启动时,被ASP.NET Core runtime 调用: public class Startup { // Use this method...IConfiguration : 读取配置 ILoggerFactory : 在Startup.ConfigureServices中创建 logger ....services方法可以通过 dependency injection 或 ApplicationServices 解析。...这些filters会按照添加到services container的顺序被调用。...ConfigureServices中被注册到 service container, 并且从Startup类的外部增强Startup: WebHost.CreateDefaultBuilder(args)
在以前的ASP.NET版本中,我们将应用程序配置设置(例如数据库连接字符串)存储在web.config文件中。 在 Asp.Net Core 中, 应用程序配置设置可以来自以下不同的配置源。...我们可以对文件进行如下修改,补充一个MyKey的键值对: { "Logging": { "LogLevel": { "Default": "Warning" } },...launchsetting 静态类WebHost的CreateDefaultBuilder()方法在应用程序启动时会自动去调用,按特定顺序读取配置源。...ConfigureAppConfiguration()方法 https://github.com/aspnet/MetaPackages/blob/release/2.2/src/Microsoft.AspNetCore/WebHost.cs...检查文件后,您将看到,以下是读取各种配置源的默认顺序 appsettings.json, appsettings.
using Microsoft.Extensions.Configuration; 一.概述 1.Host vs App configuration(对比) 在应用配置和启动之前,host被配置和launched...在应用启动时,配置源按照它们的configuration provider被指定的顺序来被读取。...IConfiguration在应用的依赖注入(DI)容器中是可用的。IConfiguration可以被注入到一个Razor Pages Pagemodel来包含一个配置的类。...[] Subsection { get; set; } } 在绑定后,JsonArrayExample.Key有值valueA,subsection的值存储在Subsection属性的数组中。...在startup中,provider读取数据库表到配置中. Reload-on-change没有实现,所以在应用启动后更新数据库对于应用的配置没有作用。
代表承载应用的WebApplication构建出来后,其Configuration属性返回的IConfiguration对象上同样包含着相同的配置。...在ASP.NET Core应用中,我们可以通过调用定义在IWebHostBuilder接口的GetSetting方法和UseSetting方法达到相同的目的。...") == "abc"); Debug.Assert(builder.WebHost.GetSetting("bar") == "xyz"); IConfiguration configuration...根据不同的目的可以将同一个应用部署到不同的环境中,在不同环境中部署的应用往往具有不同的设置。在默认情况下,环境的名称为“Production”。...对于上面创建的这个演示程序,我们现在换一种方式启动它。如图2所示,在执行“dotnet run”命令启动程序之前,我们为承载环境的四个属性设置了对应的环境变量。
WebApplicationBuilder的Services属性返回用来存放服务注册的IServiceCollection对象,所以需要的服务注册直接添加到这个集合中就可以了。...,我们不妨来试试是否可行。...我们是否可以按照如下的方式利用这个对象来设置承载环境相呢。很遗憾,我们同样会得到上面这个错误。...UseEnvironment、UseContentRoot和UseWebRoot方法,还是IHostBuilder的UseEnvironment和UseContentRoot方法,它们最终都是对配置系统的更新,那么我们是否可以利用...(app => app.UseMiddleware()); var app = appBuilder.Build(); app.Run(); 实际上是不可以的,启动改写后的程序会抛出如下的
比如我们可以将KestrelServer的相关配置定义在如下一个JSON文件中。...从命名的角度来看,ApplicationLifetime貌似是对当前应用生命周期的描述,而实际上它存在的目的仅仅是在应用启动和关闭(只要是关闭)时对相关组件发送通知而已。...IApplicationLifetime接口具有三个CancellationToken类型的属性(ApplicationStarted、ApplicationStopping和ApplicationStopped),我们可以利用它们是否已经被取消...如果管道在处理请求时发生未被处理的异常,管道的Sever会调用ApplicationLifeTime对象的StopApplication方法向WebHost发送关闭应用的通知以便后者执行一些回收释放工作...如果没有一个合法的监听地址被添加到这个 ServerAddressesFeature对象的地址列表中,WebHost会将显式指定的地址(一个或者多个)添加到该列表中。
为什么我们可以在Startup这个 “孤零零的” 类中配置依赖注入和管道? 它是什么时候被实例化并且调用的? ...启动过程中,系统“默默的”做了哪些准备工作? ...一、整体流程图 先上图, 觉得看不清可以点击看大图或者下载后放大查看。...可以创建WebHost了。...通过VS加载符号的方式调试获取到的WebHost仍是原来的版本,即使删除下载的文件后再次重新获取也一样, 应该是和新建项目默认引用的依赖版本有关。
在StratUp.cs的Configure方法中,除了 常用的参数除了IApplicationBuilder和在我上一篇文章中提到的Iconfiguration点击打开链接外 还有 IHostingEnvironment...没错,我们可以看到这基本是一些该应用程序的环境信息,包括程序名称信息,根目录,环境名称 等等基本信息,我们以该程序为例输出该程序的这些信息看看。...; }); } 给应用程序再启动后,停止中,停止后,分别绑定了控制台输出事件,我们运行看看输出结果: ?...可以看到 再控制台中 分别再应用程序的启动后 关闭中 关闭后进行了内容的输出,所以我们得出结论 IApplicationLifetime 该方法是用来绑定应用程序的运行时事件的。...该项目的完整github代码:https://github.com/liuzhenyulive/WebHost 有任何疑问欢迎再文章下方留言。
任务22:课程介绍 1.HTTP 处理过程 2.WebHost 的配置与启动 3.Middleware 与管道 4.Routing MiddleWare 介绍 任务23:Http请求的处理过程 ?...任务24:WebHost的配置 1.覆盖配置文件 2.更改启动URL 3.IHostingEnvironment 4.IApplicationLifetime 5.dotnet watch run dotnet...启动HelloCore,输出结果 ?...在csproj 的 ItemGroup 添加引用 <DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0...在任何一个Middleware<em>可以</em>结束管道 Use(next=>{ return context=>{ Console.WriteLine
dotnet --version查看输出是否安装成功。...服务注册 上面的IConfiguration可以直接使用,是因为IConfiguration服务已经自动注册过了。...中间件和管道 中间件是一种用来处理请求和响应的组件,一个web应用可以有多个中间件,这些中间件共同组成一个管道,每次请求消息进入管道后都会按中间件顺序处理对应请求数据,然后响应结果原路返回: ?...logger.LogInformation(welcome); await context.Response.WriteAsync(welcome); }); } 重新启动后可正常访问到...: Use UseWhen Map MapWhen Run Use和UseWhen注册的中间件在执行完毕之后可以回到原来的管道上; Map和MapWhen可以在新的管道分支上注册中间件,不能回到原来的管道上
BuildWebHost(args).Run(); } public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder...(args) .UseStartup() .Build(); } 代码中的IWebHost在启动时,具有自动加载...Tool": "visual studio" }, { "Language": "JAVA", "Tool": "Elcipse" } ] } 在项目中添加一个...{ public string Language { get; set; } public string Tool { get; set; } } 可以看到字段与...}); } } } 以上完整github项目代码地址:https://github.com/liuzhenyulive/BindReader 有任何疑问可以在评论区留言
其中wwwroot文件夹很特别,图标和其他的文件夹不一样,不过依然可以修改他的名称,修改名称后,文件夹图标会变回普通的图标,不过既然是特殊图标,想来一定有特殊意义,我们稍后再研究,先接着向下浏览Page...调查到这里,我做大致可以猜出了Program.cs是干什么的了——它应该是用来启动Kestrel 这个服务器的。 现在我打开Program.cs,发现如下代码。...然后,我们看到了,在Main函数使用BuildWebHost函数返回的IWebHost的实例,执行其下的Run方法。 到此,已经很明确了,Program就是启动服务器用的。...可以看到ConfigureServices里只调用了services.AddMvc(),查看官方介绍,原来这个方法是将Mvc服务添加到指定的服务集合中。...删除了Mvc服务后,我们会发现,网站启动起来了,但是并没有正常访问我们的主页。
在构建WebHost的路上他都做了这些:如加载配置,注册服务,配置功能等。...1.1 加载配置 builder内部维护了一个IConfiguration _config,可以简单的理解为key-value集合对象。...web服务 启动host。...host.Run();最终调用到WebHost.Start(),并调用当前app指定的Server对象启动web服务 public virtual void Start() {...看了代码感觉这里又是深不可测,先放着,有空了在撸这一部分。
领取专属 10元无门槛券
手把手带您无忧上云