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

ASP.NET Core 项目配置 ( Startup )

前面几章节中我们已经介绍和使用过 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 文件中默认的内容如下

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Builder;
  6. using Microsoft.AspNetCore.Hosting;
  7. using Microsoft.AspNetCore.Http;
  8. using Microsoft.Extensions.DependencyInjection;
  9.  
  10. namespace HelloWorld
  11. {
  12. public class Startup
  13. {
  14. // 该方法在运行时被调用。
  15. // 可以使用该方法将服务添加到容器中
  16. // 更多信息配置应用程序的信息,可以查看 https://go.microsoft.com/fwlink/?LinkID=398940
  17. public void ConfigureServices(IServiceCollection services)
  18. {
  19. }
  20.  
  21. // 该方法在运行时被调用
  22. // 可以使用该方法来配置 HTTP 请求管道
  23. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  24. {
  25. if (env.IsDevelopment())
  26. {
  27. app.UseDeveloperExceptionPage();
  28. }
  29.  
  30. app.Run(async (context) =>
  31. {
  32. await context.Response.WriteAsync("Hello World!");
  33. });
  34. }
  35. }
  36. }

Startup 类

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

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

  1. ConfigureServices() 方法

    1. public void ConfigureServices(IServiceCollection services){}

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

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

  2. Configure() 方法

    1. 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 打开文件,输入以下内容

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

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

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

    1. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    2. {
    3. if (env.IsDevelopment())
    4. {
    5. app.UseDeveloperExceptionPage();
    6. }
    7.  
    8. app.Run(async (context) =>
    9. {
    10. var msg = Configuration["message"];
    11. await context.Response.WriteAsync(msg);
    12. });
    13. }

修改完成后的代码如下

Startup.cs

  1. using System;
  2. using System.IO;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. using Microsoft.AspNetCore.Builder;
  7. using Microsoft.AspNetCore.Hosting;
  8. using Microsoft.AspNetCore.Http;
  9. using Microsoft.Extensions.DependencyInjection;
  10. using Microsoft.Extensions.Configuration;
  11.  
  12. namespace HelloWorld
  13. {
  14. public class Startup
  15. {
  16. public Startup()
  17. {
  18. var builder = new ConfigurationBuilder()
  19. .SetBasePath(Directory.GetCurrentDirectory())
  20. .AddJsonFile("AppSettings.json");
  21. Configuration = builder.Build();
  22. }
  23.  
  24. public IConfiguration Configuration { get; set; }
  25.  
  26. // This method gets called by the runtime. Use this method to add services to the container.
  27. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
  28. public void ConfigureServices(IServiceCollection services)
  29. {
  30. }
  31.  
  32. // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
  33. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  34. {
  35. if (env.IsDevelopment())
  36. {
  37. app.UseDeveloperExceptionPage();
  38. }
  39.  
  40. app.Run(async (context) =>
  41. {
  42. var msg = Configuration["message"];
  43. await context.Response.WriteAsync(msg);
  44. });
  45. }
  46. }
  47. }

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

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

ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程的更多相关文章

  1. ASP.NET Core 项目配置 ( Startup )(转载)

    原文:https://www.twle.cn/l/yufei/aspnetcore/dotnet-aspnet-startup.html 由于是个人网站,怕没了,特意复制保存,个人觉得讲的非常透彻 前 ...

  2. [2014-08-24]为 Xamarin Studio 创建的 Asp.Net Mvc 项目配置 gitignore

    今天在尝试 Mac 下使用 Xamarin Studio (以下简称XS) 开发 Asp.Net Mvc 项目,发现XS没启用版本控制,故自己去命令行下使用 git init,想到需要一个.gitig ...

  3. 在Linux CentOS上部署Asp.Net Core项目(Tengine、Asp.Net Core、Centos、MySql)

    一.前言 1.简单记录一下Linux CentOS 7中安装与配置Tengine的详细步骤. 2.简单比较一下Tengine 和Nginx 3.搭建Asp.net Core和部署 Web程序 4.总结 ...

  4. IIS调试ASP.NET Core项目

    IIS调试ASP.NET Core项目 新建一个ASP.NET Core Web项目,选择API模板或随便一个模板都行 新建一个名为localhost的发布(没试过远程主机,或许也可以),主要设置如下 ...

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

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

  6. 在传统.NET Framework 上运行ASP.NET Core项目

    新的项目我们想用ASP.NET Core来开发,但是苦于我们历史的遗产很多,比如<使用 JavaScriptService 在.NET Core 里实现DES加密算法>,我们要估计等到.N ...

  7. 《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发

    <ASP.NET Core项目开发实战入门>从基础到实际项目开发部署带你走进ASP.NET Core开发. ASP.NET Core项目开发实战入门是基于ASP.NET Core 3.1 ...

  8. 在ASP.NET MVC项目中使用极验验证(geetest)

    时间 2016-03-02 18:22:37 smallerpig 原文  http://www.smallerpig.com/979.html 主题 ASP.NET MVC   geetest开发体 ...

  9. NET Core项目

    在IIS上部署你的ASP.NET Core项目   概述 与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel) ...

随机推荐

  1. 21、IIS声卡驱动程序

    声卡芯片的数据通道一般都是IIS接口,但是控制音量等控制信息的接口都不相同 (新内核在linux-3.4.2\sound\soc\codecs\uda134x.c) uda134x_codec_pro ...

  2. [TypeStyle] Style CSS pseudo-classes using TypeStyle with $nest

    TypeStyle is a very thin layer on top of CSS. In this lesson we show how to change styles based on p ...

  3. 魔兽争霸war3心得体会(四):不死族vs人族1本火魔塔

    QQ对战平台上玩随机的人特别多,为了应对对方的"出其不意",我最近一直用小狗去探路,小狗在家采集30个木头-摆放商店,就可以去探路了.主要有几个好处:知道对方的种族-出生点位-开局 ...

  4. 【69.77%】【codeforces 723A】The New Year: Meeting Friends

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  5. xmpp即时通讯协议的特性---长处和缺点!

    xmpp协议的定义? XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性. 因此.基于XMPP的应用具有超强的可扩展性.经过扩展以后的XMPP能够通过发送扩展的信 ...

  6. 五一巨献,问答有礼,105QB送给IT互联网界的劳动人民

    活动主题:五一巨献,问答有礼,105QB送给IT互联网界的劳动人民活动时间:4月30日晚上10点~5月2日晚上10点活动期数:第1期,20150401 奖品:105QB获奖人数:20人1~5:每人10 ...

  7. (一一六)新浪微博client的离线缓存实现思路

    上一节(一一五)利用NSKeyedArchiver实现随意对象转为二进制介绍了将随意对象转化为二进制数据和还原的方法.可用于实现本节介绍的微博数据离线缓存. 通过新浪官方的API能够发现,返回的微博数 ...

  8. QT学习记录之环境搭建

    作者:朱金灿 来源:http://blog.csdn.net/clever101 1. 安装qt-win-opensource-4.8.5-vs2008.exe(对应的IDE是VS2008),安装路径 ...

  9. [NPM] Pass arguments to npm scripts

    Often times you’ll have variations that you’ll want to make to your npm scripts and repeating yourse ...

  10. [读书笔记]《Android开发艺术探索》第十五章笔记

    Android性能优化 Android不可能无限制的使用内存和CPU资源,过多的使用内存会导致内存溢出,即OOM. 而过多的使用CPU资源,通常是指做大量的耗时任务,会导致手机变的卡顿甚至出现程序无法 ...