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,多年以来我们已经习惯了将结构化 ...
随机推荐
- [Android]Android开发艺术探索第1章笔记
1.1 Activity 的生命周期全面分析 1.1.1 典型情况下的生命周期分析 onPause: 正在停止,正常情况下紧接着 onStop 就会被调用,然后新的 Activity 执行 onRes ...
- vs如何在Windows身份验证下调试Web项目
vs做的Web项目发布到IIS站点后,通常我们还希望利用vs来调试代码.如果Web在IIS中设置成了Windows身份验证,那么我们如何在vs调试的时候,也同样采用Windows身份认证进行调试呢? ...
- 江西财经大学第一届程序设计竞赛 C
链接:https://www.nowcoder.com/acm/contest/115/C来源:牛客网 题目描述 决赛圈还剩下两个人,“伏地魔”XDD和跑毒进圈的FZL,XDD拿着狙击枪AWM瞄准并准 ...
- Java的观察者
class Teacher extends Observable { public void startLesson() { System.out.println(String.format(&quo ...
- Flask&&人工智能AI -- 6 人工智能初识,百度AI,图灵机器人
一.人工智能初识,百度AI的创建与应用 参考连接:https://www.cnblogs.com/xiao987334176/p/9620113.html 1. 百度ai开放平台 2. AipSpee ...
- Why do you need a new Launch X431 scan tool?
1- 2017 Launch x431 v supports “Special Functions” The 2017 version of Launch x431 v diagnostic tool ...
- idea+springboot+Mybatis搭建web项目
使用idea+springboot+Mybatis搭建一个简单的web项目. 首先新建一个项目: 在这里选择Maven项目也可以,但是IDEA为我们提供了一种更方便快捷的创建方法,即Spring In ...
- oracle merge into与sqlserver merge into 比较
merge into: 在两个表之间,根据与源表联接的结果,对目标表执行插入.更新或删除操作. Oracle在9i引入了merge into命令,SQL Server 2008也引入merge int ...
- 关于python的sort和sorted
1.sort无返回值,没有新建列表 例子: a=[2,1,3] print("a=",a) b=a.sort() print("a=",a) print(&q ...
- Mac使用zsh导致maven命令无效的解决方案
第一步: vim ~/.zshrc 第二步:在.zshrc末尾加上 source ~/.bash_profile: 保存推出了 第三步 source ~/.bash_profile