2 .net core 应用程序启动

本文介绍ASP.NET Core应用的启动过程与配置方法,详细解析Startup类的作用,包括服务注册、中间件配置及如何使用WebHostBuilder指定启动类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Startup 类

ASP.NET Core 应用使用 Startup 类作为启动类,按照约定命名为 Startup。
当应用启动时,Startup的 ConfigureServices 和 Configure方法被运行

public class Startup
{
    // Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        ...
    }
    // Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app)
    {
        ...
    }
}

通过 WebHostBuilderExtensions、UseStartup 方法指定 Startup 类:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        	WebHost
				.CreateDefaultBuilder(args)
				.UseStartup<Startup>();
}

在 Startup 类构造函数中可以注入如下类:
IHostingEnvironment 以按环境配置服务。
IConfiguration 以在启动过程中配置应用。

ConfigureServices 方法

将服务添加到服务容器,使其在应用和 Configure 方法中可用。

public void ConfigureServices(IServiceCollection services)
{
	// Add framework services.
	services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddMvc();

    // Add application services.
    services.AddTransient<IEmailSender, AuthMessageSender>();
    services.AddTransient<ISmsSender, AuthMessageSender>();
}

IServiceCollection 上有 Add[Service] 扩展方法。

ASP.NET Core MVC 的 SetCompatibilityVersion
SetCompatibilityVersion 方法允许应用选择加入或退出 ASP.NET MVC Core 2.1+ 中引入的潜在中断行为变更。
以下代码将兼容模式设置为 ASP.NET Core 2.1:

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

Configure 方法

Configure 方法用于指定应用响应 HTTP 请求的方式。 可通过将中间件组件添加到 IApplicationBuilder实例来配置请求管道。

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

	app.UseStaticFiles();

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

每个 Use 扩展方法将中间件组件添加到请求管道。

Startup 筛选器

IStartupFilter 相当于IStartup,但IStartupFilter 可以对IStartup生成的中间件进行过滤

public class RequestSetOptionsStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return builder =>
        {
            builder.UseMiddleware<RequestSetOptionsMiddleware>();
            next(builder);
        };
    }
}

在 ConfigureServices 的服务容器中注册 IStartupFilter:

public void ConfigureServices(IServiceCollection services)
{    
	services.AddTransient<IStartupFilter, RequestSetOptionsStartupFilter>();
    services.AddMvc();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值