默认的网站构建方式

VS2015新建asp.net core项目,项目建立完成后,有两个文件,Program.cs和Startup.cs.

    public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
} public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}

从入口函数开始,WebHost构建网站时调用了Startup类。再来看Startup.cs文件

    public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
} //Startup构造函数只由asp.net core框架调用第一个,所以下面这个构造方法不会执行。
public Startup(IHostingEnvironment env)
{
// Set up configuration sources.
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); Configuration = builder.Build();
} public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
} // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
} app.UseStaticFiles(); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}

其中,第二个构造函数是我自己加的,VS默认生成的是第一个构造函数。跟踪调试,第一个构造函数已经有configuration对象传入进来,并且已经加载了配置信息。没有去翻asp.net core的源码,但是在文档中发现了这样一句话:

Remarks

The following defaults are applied to the returned WebHostBuilder: use Kestrel as the web server, set the ContentRootPath to the result of GetCurrentDirectory(), load IConfiguration from 'appsettings.json' and 'appsettings.[EnvironmentName].json', load IConfiguration from User Secrets when EnvironmentName is 'Development' using the entry assembly, load IConfiguration from environment variables, load IConfiguration from supplied command line args, configures the ILoggerFactory to log to the console and debug output, enables IIS integration, enables the ability for frameworks to bind their options to their default configuration sections, and adds the developer exception page when EnvironmentName is 'Development'
查看原文

原来,WebHostBuilder在默认情况下,做了以下几件事:

  • 使用了Kestrel作为Web服务器
  • 加载appsettings.json和appsettings.[EnvironmentName].json
  • 当Development环境下,会从User Secrets中加载用户私有数据
  • 从环境变量中加载数据
  • 从命令行参数中加载数据
  • 加载控制台为日志输出
  • 启用IIS integration
  • ....

正是由于WebHostBuilder帮助我们做了这么多处理,我们的网站才能够启动。

如何覆盖默认的构建方式

如上所述,WebHostBuilder帮我们完成了启动过程,那我们如何自定义我们的网站构建过程呢。
看上面代码中Startup.cs中的第二个构造函数,WebHostBuilder只会调用第一个构造函数,所以我们如果需要自定义,则需要把第二个构造函数放到最前。
这样我们就可以配置我们的配置文件加载方式、Web服务器等。

Asp.net Core Startup Class中是如何获取配置信息的的更多相关文章

  1. ASP.NET Core 1.0 中使用 Log 日志配置

    https://github.com/aspnet/Logging https://docs.asp.net/en/latest/fundamentals/logging.html ASP.NET C ...

  2. 如何在ASP.NET Core Web API中使用Mini Profiler

    原文如何在ASP.NET Core Web API中使用Mini Profiler 由Anuraj发表于2019年11月25日星期一阅读时间:1分钟 ASPNETCoreMiniProfiler 这篇 ...

  3. .net core 2.0 mvc 获取配置信息

    mvc_core_config *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 ...

  4. 探索ASP.Net Core 3.0系列二:聊聊ASP.Net Core 3.0 中的Startup.cs

    原文:探索ASP.Net Core 3.0系列二:聊聊ASP.Net Core 3.0 中的Startup.cs 前言:.NET Core 3.0 SDK包含比以前版本更多的现成模板. 在本文中,我将 ...

  5. ASP.NET Core HTTP 管道中的那些事儿

    前言 马上2016年就要过去了,时间可是真快啊. 上次写完 Identity 系列之后,反响还不错,所以本来打算写一个 ASP.NET Core 中间件系列的,但是中间遇到了很多事情.首先是 NPOI ...

  6. ASP.NET Core 1.0 中使用 Swagger 生成文档

    github:https://github.com/domaindrivendev/Ahoy 之前文章有介绍在ASP.NET WebAPI 中使用Swagger生成文档,ASP.NET Core 1. ...

  7. 在ASP.NET Core Web API中为RESTful服务增加对HAL的支持

    HAL(Hypertext Application Language,超文本应用语言)是一种RESTful API的数据格式风格,为RESTful API的设计提供了接口规范,同时也降低了客户端与服务 ...

  8. [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了

    [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/ ...

  9. ASP.NET Core 2.2中的Endpoint路由

    Endpoint路由 在ASP.NET Core 2.2中,新增了一种路由,叫做Endpoint(终结点)路由.本文将以往的路由系统称为传统路由. 本文通过源码的方式介绍传统路由和Endpoint路由 ...

随机推荐

  1. find bugs设置

  2. unity3d项目版本管理设置

    unity3d老是有一堆乱七八糟的文件,好像不提交也不行,特别是那烦人的meta文件,哪到底unity项目提交到版本管理哪些东西可以忽略呢?应该设置些什么东西呢? 菜单,Edit => Proj ...

  3. 匹配IP的正则表达式

    正则表达式匹配IP 1 ((25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9])  

  4. 【转+修改】容联云通讯api调用短信发送调用

    转自   https://my.oschina.net/u/1995134/blog/814540 需要荣联云通讯 的 相对应SDKjar包. CCP_REST_SMS_SDK_JAVA_v2.6.3 ...

  5. 多线程简单案例 - join( ) -lock()

    join() 在调用结束前,主线程不会结束 不加的话,主线程会在子线程结束前继续执行:加了join(),主线程会等待子线程结束后在继续执行下去 #python3 #main print number ...

  6. 寻找最小的k个数(四种方法)

    1 使用从大到小的优先队列保存最小的K个数,每次取出K个数之后的其余数和堆顶元素比较,如果比堆顶元素小,则将堆顶元素删除,将该元素插入 void topK(int arr[],int n,int k) ...

  7. gem install redis安装时报错:redis requires Ruby version >= 2.2.2

    Centos默认支持ruby到2.0.0,可gem 安装redis需要最低是2.2.2 解决办法是 先安装rvm,再把ruby版本提升至2.3.3 1.安装curl sudo yum install  ...

  8. 小程序的get和post需要注意的地方

    在进行异步请求之前先去小程序后台配置好服务器域名. get请求:header: { 'content-type':'json'}就可以. post请求:header: { 'content-type' ...

  9. OpenID Connect Core 1.0(四)使用授权码流验证(上)

    3.1 使用授权码流验证(Authentication using the Authorization Code Flow) 本节描述如何使用授权码流执行验证.当使用授权码流时,会从令牌终结点返回的所 ...

  10. Oracle 11g DataGuard搭建(一) - 单节点到单节点

    (一)DataGuard概要 DataGuard中文称为”数据卫士“,提供了数据库高可用性.数据保护和灾难恢复的功能.DataGuard通过建立primary数据库和standby数据库来确立参照关系 ...