Startup 类

ASP.NET Core 应用程序被设计为模块化,因此开发人员只需要包含他们需要的功能和服务。每个 .NET Core 应用程序都需要一个 Startup 类来配置应用程序的功能和服务。默认情况下,这个类的名字是 Startup,不守也可以将其命名为其它任何名称。

Startup.cs文件被当作 Startup 类作为项目默认模板的一部分生成。它有一个必需的Configure方法和一个可选的ConfigureServices方法。Configure方法用于配置请求管线,ConfigureServices方法用于配置应用程序可以使用服务。

请求管线

当向 Web 应用程序发出请求时,需要通过多种方式进行处理。需要考虑许多因素,应该将请求定向或路由到哪里?是否应该记录请求的细节?应用程序是否应该简单地返回文件的内容?应该压缩响应?如果在处理请求时遇到异常,会发生什么情况?发出请求的人实际上是否允许访问他们请求的资源?如何处理Cookie或其它与请求相关的数据?

这些处理操作中的每一个都由独立的组件执行。用来描述这些组件的术语是 中间件 。它们一起构成请求管线。

Configure方法

这是默认项目模板中的Configure方法:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
	if (env.IsDevelopment())
	{
		app.UseDeveloperExceptionPage();
	}
	else
	{
		app.UseExceptionHandler("/Error");
	}

	app.UseStaticFiles();

	app.UseMvc(routes =>
	{
		routes.MapRoute(
			name: "default",
			template: "{controller=Home}/{action=Index}/{id?}");
	});
}

传递给方法的参数是IApplicationBuilderIHostingEnvironment。实际上不需要任何参数,IApplicationBuilder 通过向它添加中间件来配置请求管线的组件,IHostingEnvironment提供有关应用程序当前正在运行环境的信息。

默认的Configure方法检查当前环境(通过ASPNETCORE_ENVIRONMENT环境变量设置)是否为 Development 。如果是,则将中间件添加到请求管道中,在应用程序运行引发异常的情况下,将详细的错误消息输出给浏览器。中间件使用IApplicationBuilder的扩展方法(在本例中为UseDeveloperExceptionPage())添加,这是构建请求管线的推荐方式。如果环境不是 Development(例如 Production),则会添加另一个中间件组件,用于记录有关失败请求的详细信息并重定向到 Error 页面。对于一个动态的网站,建议在 Error 页面显示更友好的消息,而不是堆栈跟踪。

接着添加可以提供静态文件(图像,脚本,样式表,PDF文件等)的中间件,再将 MVC 框架添加到应用程序中。这是至关重要的,因为 Razor 页面是MVC的一部分。默认项目模板为 MVC 请求设置了默认路由,如果您不打算构建 Razor 页面/ MVC / Web API 混合应用程序,可以省略这些路径。所以如果您愿意,可以将UseMvc方法改为如下:

app.UseMvc();

ConfigureServices方法

ASP.NET Core 广泛使用了依赖注入(DI)—— 一种有助于解耦代码的技术。组件或“服务”被表示为抽象,通常是接口,正如您已经在Configure方法中看到的IApplicationBuilder。在DI中,每个抽象都与一个实现(或“具体”)类型配对。这个配对存储在类似字典的结构中,当抽象作为参数传递给方法(特别是构造函数)时,实现类型就会被实例化并通过DI容器传入。ConfigureServices方法的主要目的是为应用程序注册所需的服务实现类型。它还用于配置与这些服务相关的其它选项。

如果在Startup类中已经添加了,则ConfigureServices方法在Configure方法之前被调用。这是有道理的,因为Configure方法可能会尝试使用需要事先注册的服务,以便可以解析它们。这是使用MVC的默认模板:

public void ConfigureServices(IServiceCollection services)
{
	services.AddMvc();
}

AddMvc方法是一个包装,用于添加大量组件到服务集合,包括路由、模型绑定、缓存、视图引擎和MVC(应该是Razor页面)需要的其它组件。它还提供了一个与服务相关的配置选项。例如,AddMvc方法返回一个IMvcBuilder,它提供了多种配置选项:

Mvc Options

如果您想要更改 Razor 页面根文件夹,而不是默认的 Pages,那么您可以这样做:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().AddRazorPagesOptions(options =>
    {
        options.RootDirectory = "/Content";
    });
}

如果您在查阅过程中,发现内容存在错误,请到我的博客中留言,谢谢,http://www.cnblogs.com/tdfblog/p/learn-razor-pages.html
最后一次更新时间: 2018-02-09 07:08:07