ASP.NET Core - 各项配置
之前搭建好了各项开发环境,现在来说说ASP.NET Core的各项配置、项目结构、以及在请求管道中挂载的各式各样的中间件。今天先来探讨探讨其各项配置及其项目结构
ASP.NET Core和上一代Framework4.5中的ASP.NET MVC5(或者WebForm)在应用启动环节上有很大的不同,要探讨ASP.NET Core的启动方式需要先了解一下它的基础框架 .NET Core。
我先来看看,最初的.NET Core的应用结构,如下:

我们抛开VSCode可以简单的发现有只要两个必须的文件,一个就是应用启动的入口Program.cs文件,一个就是环境和依赖配置的project.json文件。
现在我们来看看这两个文件的内容:
using System; namespace ConsoleApplication
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
Program.cs
可以就看到program只有一个main方法,看到这个相信大家不难理解程序的入口为何在这里,为啥要用Program来做入口呢,之后我们在说道说道。
{
"version": "1.0.0-*",
"buildOptions": {
"debugType": "portable",
"emitEntryPoint": true
},
"dependencies": {},
"frameworks": {
"netcoreapp1.0": {
"dependencies": {
"Microsoft.NETCore.App": {
"type": "platform",
"version": "1.0.0"
}
},
"imports": "dnxcore50"
}
}
}
project.json
在这个文件中只要用于配置使用的基础架构是Core还是framework,依赖项,程序版本说明,兼容性说明等等应用的基础配置项,这些配置项之后会一一道来,在这里可以简单先知道dependencies 这项配置适用于配置应用需要的依赖插件包的。
可以简单的理解为 ASP.NET Core 是由 .NET Core加几项配置和依赖项组成的,具体教程可以参看ASP.NET 中文文档。接下来我们直接看使用yeoman生成的asp.net Core的空应用结构:

至于Dockerfile 属于Docker范畴 后面再来另起文章来讲解, 博友也可以移步此处了解。
现在我们看看project.json内几个种重要依赖包:
1.运行服务的载体,ASP.NET Core支持3种服务载体:
a. Microsoft.AspNetCore.Server.IISIntegration,就是大家熟知的IIS
b. Microsoft.AspNetCore.Server.Kestrel ,跨平台
c. Microsoft.AspNetCore.Server.WebListener,只能在windows 上使用,还是预览版
通常我们会使用a和b两种,至于原因我们在后说Server的时候给大家说说。
2. 日志输出 Microsoft.Extensions.Logging.Console
3. 平台的基础框架包 Microsoft.NETCore.App
4. 异常中间件 Microsoft.AspNetCore.Diagnostics (包括很多异常显示,欢迎页面等等)
当然重要包还有很多,我们会在完后慢慢一一给道来。
再来看看生成出来的program.cs和Startup.cs
/// <summary>
/// 应用入口类
/// </summary>
public class Program
{
public static void Main(string[] args)
{
//配置类
var config = new ConfigurationBuilder()
.AddCommandLine(args) .AddEnvironmentVariables(prefix: "ASPNETCORE_")//运行的环境变量
.Build(); //web宿主
var host = new WebHostBuilder()
.UseConfiguration(config) //引入配置
.UseKestrel() //使用Kestrel部署
.UseUrls("http://*:6000") //修改Kestrel绑定的地址
.UseContentRoot(Directory.GetCurrentDirectory())//引用根目录
.UseIISIntegration() //引入IIS组件包
.UseStartup<Startup>()//启动配置文件
.Build(); //运行web宿主
host.Run();
}
}
/// <summary>
/// web宿主的入口类
/// </summary>
public class Startup
{
//加入服务项到容器种, 这个方法将会被runtime调用
public void ConfigureServices(IServiceCollection services)
{ } /// <summary>
/// 配置HTTP请求管道
/// </summary>
/// <param name="app">被用于构建应用程序的请求管道。只可以在 Startup 中的 Configure 方法里使用</param>
/// <param name="env">提供了访问应用程序属性,如环境变量</param>
/// <param name="loggerFactory">提供了创建日志的机制</param>
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(); if (env.IsDevelopment()) //根据配置的环境为开发环境,则会配置抛出异常错误界面
{
app.UseDeveloperExceptionPage(); //抛出详细的异常错误界面
} //管道断路
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
}
我们大概看了一下生成出的每一个文件的含义,包括ASP.NET Core的配置和启动顺序和方式,接下来我们将会了解中间件和管道配置等重要的HTTP请求配置
谢谢各位博友的耐心阅读,如有不对请指正
ASP.NET Core - 各项配置的更多相关文章
- ASP.NET Core的配置(5):配置的同步[设计篇]
本节所谓的"配置同步"主要体现在两个方面:其一,如何监控配置源并在其变化的时候自动加载其数据,其目的是让应用中通过Configuration对象承载的配置与配置源的数据同步:其二. ...
- ASP.NET Core的配置(5):配置的同步[ 实例篇]
ConfigurationBuilder在生成以Configuration对象的时候会利用注册其中的ConfigurationProvider加载原始的配置数据,那么一旦配置源中的数据发生变化,应用程 ...
- ASP.NET Core的配置(4):多样性的配置来源[下篇]
我们在上篇和中篇对配置模型中默认提供的各种ConfigurationProvider进行了深入详尽的介绍,如果它们依然不能满足项目中的配置需求,我们可以还可以通过自定义ConfigurationPro ...
- ASP.NET Core的配置(4):多样性的配置来源[中篇]
我们在本篇文章中会介绍三种针对物理文件的ConfiguationProvider,它们分别是针对JSON文件的JsonConfiguationProvider,针对XML文件的XmlConfiguat ...
- ASP.NET Core的配置(4):多样性的配置来源[上篇]
较之传统通过App.config和Web.config这两个XML文件承载的配置系统,ASP.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命 ...
- ASP.NET Core的配置(3): 将配置绑定为对象[下篇]
我们在<读取配置信息>通过实例的形式演示了如何利用Options模型以依赖注入的方式直接获取由指定配置节绑定生成的Options对象,我们再次回顾一下当初我们编写的程序.如下面的代码片段所 ...
- ASP.NET Core的配置(3): 将配置绑定为对象[上篇]
出于编程上的便利,我们通常不会直接利用ConfigurationBuilder创建的Configuration对象读取某个单一配置项的值,而是倾向于将一组相关的配置绑定为一个对象,我们将后者称为Opt ...
- ASP.NET Core的配置(2):配置模型详解
在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvi ...
- ASP.NET Core的配置(1):读取配置信息
提到"配置"二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化 ...
随机推荐
- hdu6397 Character Encoding 隔板法+容斥原理+线性逆元方程
题目传送门 题意:给出n,m,k,用m个0到n-1的数字凑出k,问方案数,mod一个值. 题目思路: 首先如果去掉数字范围的限制,那么就是隔板法,先复习一下隔板法. ①k个相同的小球放入m个不同的盒子 ...
- 非局部均值(Nonlocal-Mean)
转载自网站:http://www.cnblogs.com/luo-peng/p/4785922.html 非局部均值去噪(NL-means) 非局部均值(NL-means)是近年来提出的一项新型的 ...
- MySQL之concat以及group_concat的用法
本文中使用的例子均在下面的数据库表tt2下执行: 一.concat()函数 1.功能:将多个字符串连接成一个字符串. 2.语法:concat(str1, str2,...) 返回结果为连接参数产生的字 ...
- es6数组新方法
(1)Array.from(aarr,fn,obj) function fn(dr, sd, d) { /*Array.from 类数组转化为数组*/ console.log(arguments) v ...
- 电量分析工具 Battery Historian 的配置及使用
1.Building from source code(通过各种配置后从源码构建) 官方流程看似很麻烦,但一上手,很快就搞定,让我情何以堪. ps:以下均是参考官方及网友做的 copy https:/ ...
- 关于i++与++i的学习讨论!
先谈容易的知识点 区别两个 1. i++ 返回原来的值,++i 返回加1后的值. 2. i++ 不能作为左值,而++i 可以. 重点说下第二点.首先解释下什么是左值 左值是对应内存中有确定存储地址的对 ...
- 时间比较早晚java
package demo; import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale; publi ...
- [转]JS 只能输入数字和两位小数的JS
本文转自:http://blog.sina.com.cn/s/blog_724008890101dgep.html JS代码: <script language="JavaScript ...
- (转)使用介质设备安装 AIX 以通过 HMC 安装分区
使用介质设备安装 AIX 以通过 HMC 安装分区 原文:https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_72/com.ibm.aix.h ...
- ORACLE分页SQL
1,使用rownum SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A ) 2,使用between SEL ...