ASP.NET Core 允许您全面控制应用程序对每个请求的响应。应用程序的入口点是一个名为 Startup
的类,该类负责设置配置并将应用程序所需的各项服务联系起来。开发人员可以在 Startup
类中配置请求管道,该管道将用于处理应用程序的所有请求。
Configure
方法用于指定 ASP.NET Core 应用程序如何对每个 HTTP 请求做出响应。虽然您可以配置每个请求都接收相同的响应,但在实际场景中,您需要更多的功能。复杂的管道配置可以通过中间件进行封装,并通过扩展方法添加到 IApplicationBuilder
对象上。
Configure
方法必须接受一个 IApplicationBuilder
参数。还可以选择性地指定其他服务,如 IWebHostEnvironment
或 IConfiguration
。如果它们可用,这些服务将由服务器注入到方法中。以下是从默认 Web 站点模板中提取的一个例子,其中多个扩展方法被用来配置管道以支持 BrowserLink、错误页、静态文件、ASP.NET MVC 和 Identity:
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
}
每个中间件都是管道的一部分,比如上面的路由中间件就是其中之一。中间件定义了 ASP.NET Core 如何处理请求和响应,包括传递请求给下一个中间件,或者直接向客户端发送响应。
您可以在 Middleware 章节了解更多关于中间件的知识。
Startup
类中的可选方法 ConfigureServices
用于配置供应用程序内使用的各项服务。这些服务可通过 IServiceProvider
接口获取,并可用于应用程序中的各个部分,如中间件、控制器等。
ConfigureServices
方法必须接受一个 IServiceCollection
参数,这是一个表示一组服务及其生命周期的对象。许多 ASP.NET Core 组件和服务都有相关的扩展方法,可以让您轻松地将它们添加到服务容器中。
以下是从默认 Web 站点模板中提取的例子,其中多项扩展方法被用来设置应用程序,以便它可以使用 Entity Framework、Identity 和 MVC:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddControllersWithViews();
services.AddRazorPages();
}
通过依赖注入(Dependency Injection),您可以在需要时向应用程序提供服务,而不是在代码中硬编码具体的实现。就像 Startup
类可以将指定的依赖项作为其方法参数一样,中间件、控制器和其他类也可以这样做。
ConfigureServices
方法也是添加配置选项类的好地方,只要您希望它们在整个应用程序中都可用。有关配置选项的更多信息,请参阅 Configuration。
Startup
类有一个构造函数,其中可以注入一些常用的框架服务和对象。以下是可供使用的服务列表:
IWebHostEnvironment
: 提供与应用程序环境相关的属性,如内容根路径 (ContentRootPath
)、应用程序名称 (ApplicationName
) 以及环境名称 (EnvironmentName
)。
IConfiguration
: 提供应用程序配置值的访问。
ILoggerFactory
: 提供创建日志记录器的机制。
请注意,虽然可以在构造函数中使用 IWebHostEnvironment
和 IConfiguration
,但最好是在 ConfigureServices
和 Configure
方法中使用它们,因为这两个方法总是会被调用。
Startup
类可以使用 IApplicationLifetime
接口来监听应用程序的生命周期事件,如下所示:
public class Startup
{
private readonly ILogger<Startup> _logger;
public Startup(IConfiguration configuration, ILogger<Startup> logger)
{
Configuration = configuration;
_logger = logger;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
// ...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...
}
// Add the following using directive:
using Microsoft.AspNetCore.Hosting;
// Add the following line to the Startup constructor:
private readonly IApplicationLifetime _appLifetime;
public Startup(IConfiguration configuration, ILogger<Startup> logger, IApplicationLifetime appLifetime)
{
Configuration = configuration;
_logger = logger;
_appLifetime = appLifetime;
}
// Add the following method:
private async Task StopApplicationAsync()
{
_logger.LogInformation("Stopping application...");
await _appLifetime.StopApplicationAsync();
_logger.LogInformation("Stopped application.");
}
}
然后,您可以注册一个事件处理器来监听应用程序停止事件:
// Add the following lines after configuring the services in ConfigureServices:
// Register an event handler for when the application stops gracefully.
_appLifetime.ApplicationStopping.Register(() => StopApplicationAsync());
// Register an event handler for when the application stops abruptly.
_appLifetime.ApplicationStopped.Register(() => { });
这些事件处理器将在应用程序关闭时执行,以便您有机会清理资源或保存状态。请注意,`ApplicationStopping` 事件可能是异步的,因此您需要使用 `async` 关键字并返回一个 `Task` 对象。
ASP.NET Core 支持在多个环境中运行应用程序,这对于测试和生产环境之间的隔离至关重要。您可以根据当前环境选择性地启用或禁用中间件、配置值以及其他行为。
您可以使用环境变量、命令行参数或配置文件来指定当前环境。有关详细信息,请参阅官方文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/environments?view=aspnetcore-3.1
标签:
加入本站QQ群获取更多实时游戏软件,线报,资源,福利点我加群
免责声明:
多特下载站仅为用户提供信息存储空间服务,所有资源均来源于网络或用户上传。我们无法对所有内容进行逐一审核,因此不保证资源的绝对准确性和完整性。用户在使用过程中应自行判断并承担相关风险。如涉及版权问题,请及时联系我们处理。对于因使用本站资源引发的一切争议、损失或法律责任,除法律明确规定外,多特下载站概不负责。请用户务必遵守法律法规,合理合法使用下载内容。侵删请致信E-mail: caozl@nbrjwl.com