原文:https://www.twle.cn/l/yufei/aspnetcore/dotnet-aspnet-startup.html

由于是个人网站,怕没了,特意复制保存,个人觉得讲的非常透彻

前面几章节中我们已经介绍和使用过 Startup 类,包括

  1. 在创建新项目时修改了 Startup 类中的 Hello World 修改返回值
  2. 上一章节中讲解 Program.cs 时讲到 Program 类会实例化 Startup 类

但 Startup 能做的不仅仅是这些,可以说 ASP.NET Core 中大大小小的各个组件和中间件都会和 Startup类打交道。

但一个章节又不能全部讲完。于是乎,这章节我们只讲解最重要的几个东西

以前的版本

如果你曾经使用过 ASP.NET,那么你可能会期望

  1. 看到一个 global.asax 文件,可以在启动 Web 应用程序期间编写代码来执行的一个地方

  2. 看到一个 web.config 文件,用来包含应用程序需要执行的所有配置参数

在 ASP.NET Core 中,这些文件全部消失,取而代之的是使用 Startup.cs 加载配置和启动代码

Startup.cs 文件中有一个 Startup 类,在这个类中可以配置应用程序,甚至配置配置源

默认的 Startup.cs 文件内容

Startup.cs 文件中默认的内容如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection; namespace HelloWorld
{
public class Startup
{
// 该方法在运行时被调用。
// 可以使用该方法将服务添加到容器中
// 更多信息配置应用程序的信息,可以查看 https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
} // 该方法在运行时被调用
// 可以使用该方法来配置 HTTP 请求管道
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
} app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
}
}

Startup 类

Startup 类可以用来定义请求处理管道和配置应用程序需要的服务。

Startup 类必须是公开的,且必须包含以下两个方法

  1. ConfigureServices() 方法

    public void ConfigureServices(IServiceCollection services){}
    

    ConfigureServices() 方法用于定义应用程序所需要的服务,例如 ASP.NET Core MVC 、 Entity Framework Core 和 Identity 等等

    关于 服务 我们会再接下来的章节中详细介绍

  2. Configure() 方法

    public void Configure(IApplicationBuilder app, IHostingEnvironment env){}
    

    Configure() 用于定义请求管道中的中间件

    关于 请求管道 的概念,我们会在接下来的章节中详细介绍

项目配置

Startup 类中的 Configure() 方法用于配置和构建 HTTP 请求管道的地方

该怎么理解这句话呢?

其实也就是说,Configure() 方法可以用来定义我们的应用程序如何响应请求

对于任意网址,默认情况下它只会输出 Hello World!

如果我们希望应用程序的行为不同,我们需要在 Configure() 方法中添加其他代码来更改管道

例如,如果我们想要为诸如 index.html 之类的静态文件提供服务,则需要向 Configure() 方法添加一些代码

例如,如果想要给 ASP.NET MVC 控制器发送错误页面或路由请求,都需要在这个 Configure() 方法中做一些工作

动态响应内容

默认情况下,我们为每个请求都提供了一个硬编码的响应 Hello World!

接下里来我们不再使用硬编码,而是从某个组件中加载字符串来响应的每一个请求

  1. 在解决方案管理器的 HelloWorld 项目上点击右键,选择 添加 -> 新建文件

    如果你的电脑是 Windows ,则是 添加 -> 新建项

  2. 在新建文件对话框中,选中左边的 Web,然后选中右边的 空 JSON 文件

    如果你的电脑是 Windows ,则是先选中 ASP.NET Core 下的 常规 ( Genreral ) 然后选中 JSON 文件

  3. 在名称中输入 AppSettings.json,然后点击右下脚的 新建 按钮,添加一个 AppSettings.json 文件

    如果你的电脑是 Windows ,则是点击 添加 按钮

  4. 然后双击 AppSettings.json 打开文件,输入以下内容

    {
    "message":"Hello World!\n你好,简单教程,你的网址是 www.twle.cn 吗?"
    }
  5. 双击打开 Startup.cs 文件,在 Startup 类中添加一个可读写属性 Configuration

    public IConfiguration Configuration { get; set; }
    
  6. 修改 Startup 类,添加 Startup() 构造函数,加载 AppSettings.json 文件,然后构建配置项

    public Startup()
    {
    var builder = new ConfigurationBuilder().AddJsonFile("AppSettings.json");
    Configuration = builder.Build();
    }
  7. 最后修改 Configure() 方法,从配置项中读取 message 并作为响应的内容

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
    if (env.IsDevelopment())
    {
    app.UseDeveloperExceptionPage();
    } app.Run(async (context) =>
    {
    var msg = Configuration["message"];
    await context.Response.WriteAsync(msg);
    });
    }

修改完成后的代码如下

Startup.cs

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Configuration; namespace HelloWorld
{
public class Startup
{
public Startup()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("AppSettings.json");
Configuration = builder.Build();
} public IConfiguration Configuration { get; set; } // This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
} // 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.Run(async (context) =>
{
var msg = Configuration["message"];
await context.Response.WriteAsync(msg);
});
}
}
}

点击绿色三角形运行项目 ( 如果项目已经在运行则直接刷新浏览器即可 )

刷新浏览器,显示结果如下

ASP.NET Core 项目配置 ( Startup )(转载)的更多相关文章

  1. ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 项目配置 ( Startup ) 前面几章节 ...

  2. 【已解决】IIS搭建 asp.net core 项目后 其他电脑访问不到资源文件

    IIS搭建asp.net core 项目后,访问不到里面的资源文件(图片等),解决方法如下: 1.检查asp.net core发布文件中的资源文件是不是都放到了wwwroot名称的目录中. 2.检查a ...

  3. 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之三 —— 配置

    ==== 目录 ==== 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之一 —— 开篇 跟我学: 使用 fireasy 搭建 asp.net core 项目系列之二 —— ...

  4. 在IIS上部署你的ASP.NET Core项目 (转载)

    概述 与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到Kest ...

  5. 【无私分享:ASP.NET CORE 项目实战(第十三章)】Asp.net Core 使用MyCat分布式数据库,实现读写分离

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 MyCat2.0版本很快就发布了,关于MyCat的动态和一些问题,大家可以加一下MyCat的官方QQ群:106088787.我 ...

  6. 【无私分享:ASP.NET CORE 项目实战(第十二章)】添加对SqlServer、MySql、Oracle的支持

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 增加对多数据库的支持,并不是意味着同时对多种数据库操作,当然,后面,我们会尝试同时对多种数据库操作,这可能需要多个上下文,暂且 ...

  7. 【无私分享:ASP.NET CORE 项目实战(第十一章)】Asp.net Core 缓存 MemoryCache 和 Redis

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 经过 N 久反复的尝试,翻阅了网上无数的资料,GitHub上下载了十几个源码参考, Memory 和 Redis 终于写出一个 ...

  8. 【无私分享:ASP.NET CORE 项目实战(第九章)】创建区域Areas,添加TagHelper

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 在Asp.net Core VS2015中,我们发现还有很多不太简便的地方,比如右击添加视图,转到试图页等功能图不见了,虽然我 ...

  9. 【无私分享:ASP.NET CORE 项目实战(第八章)】读取配置文件(二) 读取自定义配置文件

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 我们在 读取配置文件(一) appsettings.json 中介绍了,如何读取appsettings.json. 但随之产生 ...

随机推荐

  1. 译注(3): NULL-计算机科学上最糟糕的失误

    原文:the worst mistake of computer science 注释:有些术语不知道怎么翻译,根据自己理解的意思翻译了,如有不妥,敬请提出:) 致谢: @vertextao @fra ...

  2. 二叉树最近公共祖先(LeetCode)

    给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖先且 x 的深 ...

  3. this.setData , that.setData , this.data.val三者之间的区别和作用

    1.this.setData({ }) <view bindtouchmove="tap_drag" bindtouchend="tap_end" bin ...

  4. Sass和less的区别是什么?用哪个好

    什么是Sass和Less?       Sass和Less都属于CSS预处理器,那什么是 CSS 预处理器呢?        CSS 预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为 ...

  5. [CF 1043F] Make It One

    Description 给定 \(n\) 个正整数 \(a_i\),最少选出多少个 \(a_i\) 使得他们 \(gcd\) 为 \(1\)?\(n,a_i\le 3\times 10^5\). So ...

  6. HBuilderX——编译失败:HBuilderX 安装目录不能包括 ( 等特殊字符

    前言 编译小程序的时候报错,原因其实很简单,安装目录的问题! 解决 我安装到了D:\Program Files (x86),放到D盘的根目录下或者D:\Program Files只要不包含一些特殊字符 ...

  7. P1438 无聊的数列 (差分+线段树)

    题目 P1438 无聊的数列 解析: 先考虑修改,用差分的基本思想,左端点加上首项\(k\),修改区间\((l,r]\)内每个数的差分数组都加上公差\(d\),最后的\(r+1\)再减去\(k+(r- ...

  8. pre的内容自动转行

    使pre的内容自动换行(转) <pre> 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre> 标签的一个常见 ...

  9. 使用基本MVC2模式创建新闻网站

    MVC简介 所谓MVC,即Model-View-Controller. (1)Model层:Model指模型部分,一般在应用中Model层包括业务处理层和数据访问层.数据访问层主要是对数据库的一些操作 ...

  10. C#编程中的Image/Bitmap与base64的转换及 Base-64 字符数组或字符串的长度无效问题 解决

    最近用base64编码传图片遇到了点问题,总结下. 首先总结下base64编码的逻辑,来自网络:https://www.cnblogs.com/zhangchengye/p/5432276.html ...