之前搭建好了各项开发环境,现在来说说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 - 各项配置的更多相关文章

  1. ASP.NET Core的配置(5):配置的同步[设计篇]

    本节所谓的"配置同步"主要体现在两个方面:其一,如何监控配置源并在其变化的时候自动加载其数据,其目的是让应用中通过Configuration对象承载的配置与配置源的数据同步:其二. ...

  2. ASP.NET Core的配置(5):配置的同步[ 实例篇]

    ConfigurationBuilder在生成以Configuration对象的时候会利用注册其中的ConfigurationProvider加载原始的配置数据,那么一旦配置源中的数据发生变化,应用程 ...

  3. ASP.NET Core的配置(4):多样性的配置来源[下篇]

    我们在上篇和中篇对配置模型中默认提供的各种ConfigurationProvider进行了深入详尽的介绍,如果它们依然不能满足项目中的配置需求,我们可以还可以通过自定义ConfigurationPro ...

  4. ASP.NET Core的配置(4):多样性的配置来源[中篇]

    我们在本篇文章中会介绍三种针对物理文件的ConfiguationProvider,它们分别是针对JSON文件的JsonConfiguationProvider,针对XML文件的XmlConfiguat ...

  5. ASP.NET Core的配置(4):多样性的配置来源[上篇]

    较之传统通过App.config和Web.config这两个XML文件承载的配置系统,ASP.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命 ...

  6. ASP.NET Core的配置(3): 将配置绑定为对象[下篇]

    我们在<读取配置信息>通过实例的形式演示了如何利用Options模型以依赖注入的方式直接获取由指定配置节绑定生成的Options对象,我们再次回顾一下当初我们编写的程序.如下面的代码片段所 ...

  7. ASP.NET Core的配置(3): 将配置绑定为对象[上篇]

    出于编程上的便利,我们通常不会直接利用ConfigurationBuilder创建的Configuration对象读取某个单一配置项的值,而是倾向于将一组相关的配置绑定为一个对象,我们将后者称为Opt ...

  8. ASP.NET Core的配置(2):配置模型详解

    在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvi ...

  9. ASP.NET Core的配置(1):读取配置信息

    提到"配置"二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化 ...

随机推荐

  1. Unity 动画系统目录 之 Animation

    返回 Unity 动画系统目录 官方文档 Animation:https://docs.unity3d.com/ScriptReference/Animation.html Animator:http ...

  2. 神奇的操作--O(1)快速乘

    从同机房大佬那里听来的... 用O(1)时间求出两个相乘超过long long的数的取摸的结果 神奇的操作... inline long long multi(long long x,long lon ...

  3. hdu1865 1sting (递归+大数加法)

    1sting Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  4. Install NGINX, PHP-FPM (5.6) on CentOS 6

    Installing NGINX with PHP on CentOS 6 can be a hassle depending on the install and packages you use. ...

  5. management & Actuator

    self define indicator https://docs.spring.io/spring-boot/docs/current/reference/html/production-read ...

  6. my29_PXC集群状态查看

    节点从集群中移除的状态 show status like '%wsrep%';wsrep_cluster_status为Disconnected则表示该节点已经不在集群中了,示例如下 > sho ...

  7. vue自定义指令拖动div

    钩子函数一个指令定义对象可以提供如下几个钩子函数:bind:只掉用一次,指令第一次绑定到元素是调用,在这里可以进行一次性的初始化设置inserted:被绑定元素插入父节点时调用(仅保证父节点存在,但不 ...

  8. Cookie和Session入门(一)

    目录一)背景介绍二)Cookie机制三)Session机制四)两者比较五)参考资料链接一)背景介绍Cookie与Session是常用的会话跟踪技术.1.Cookie通过在客户端记录信息确定用户身份,S ...

  9. java && C# 线程

      1.多个线程用到同一个资源的话,必须lock 2.为了解决,在竞争的情况下,优先分配资源给A.就是A和B线程都同时在同一时刻需要资源x,然后的话也不清楚系统是具体怎样调度的.或者说怎样调度,都有可 ...

  10. [转]使用Node.js完成的第一个项目的实践总结

    本文转自:http://blog.csdn.net/yanghua_kobe/article/details/17199417 https://github.com/yanghua/FixedAsse ...