WebAPI-Program
WebAPI-Program
在 ASP.NET Core 中,程序的入口点通常是在 Program.cs
文件中定义的,这个文件负责配置和启动 Web 应用程序
Program.cs
文件中的主要对象是 WebApplicationBuilder
和 WebApplication
,这两个对象分别用于配置和构建应用程序
WebApplicationBuilder
WebApplicationBuilder
是用于配置应用程序的构建器对象。它提供了一种集中配置应用程序的方式,包括配置服务、中间件、主机和环境等。
Configuration
:获取或设置配置提供程序。Environment
:获取当前的IWebHostEnvironment
对象,用于访问环境信息。Services
:获取IServiceCollection
,用于注册服务。Build()
:构建WebApplication
实例。
WebApplication
WebApplication
是实际运行的应用程序实例。它负责配置和执行中间件管道,并处理 HTTP 请求。
主要方法和属性
Environment
:获取当前的IWebHostEnvironment
对象。Use*
方法:用于配置中间件,例如UseRouting
、UseEndpoints
、UseAuthentication
等。Run()
:启动应用程序并开始监听传入的请求。
.NET不同版本
需要注意的是,在.NET 6和.NET Core 3.1中,程序的入口(Program)是调用了不同的方法来启动ASP.NET项目
.NET Core 3.1
.NET Core 3.1调用了CreateHostBuilder方法来初始化项目
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
/// <summary>
/// 创建Host
/// </summary>
/// <param name="args"></param>
/// <returns></returns>
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((builder, config) => { GetSMSelectConfiguration(config, Configuration); })
.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); })
.ConfigureDynamicInterceptor()
.UseNLog();
.NET 6
.NET 6调用了WebApplication
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddJsonFile($"appsettings.{builder.Environment.EnvironmentName}.json", true)
.AddEnvironmentVariables();
AddSmSelectConfiguration(builder.Configuration, builder.Configuration);
var startUp = new Startup(builder.Configuration, builder.Environment);
//注入服务
startUp.ConfigureServices(builder.Services);
// 在创建 Host 之前设置
AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
//配置nlog
builder.WebHost.UseNLog();
//构建WebApplication
var app = builder.Build();
//配置管道
startUp.Configure(app);
//运行WebApplication
app.Run();
}
Startup.cs
在ASP.NET Core中,Startup.cs
文件是一个非常重要的文件,它用于配置应用程序的启动过程。Startup.cs
文件中的 Startup
类包含两个主要方法:ConfigureServices
和 Configure
。这两个方法分别用于配置应用程序的服务和中间件。
在 .NET 6.0 中,ASP.NET Core 引入了一种新的简化启动模式,称为“最小API”(Minimal API)。这种新模式旨在减少样板代码,使应用程序的启动配置更加简洁和直观。因此,传统的 Startup.cs
文件在 .NET 6.0 中被取消了,取而代之的是在 Program.cs
文件中直接配置服务和中间件
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Register services here
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Configure the HTTP request pipeline here
}
}
ConfigureServices
ConfigureServices
方法用于配置应用程序的服务。这些服务可以是任何需要通过依赖注入(Dependency Injection, DI)容器管理的对象,包括数据库上下文、业务逻辑类、第三方库等。
-
注册服务:将服务注册到DI容器中,以便在应用程序的其他部分通过构造函数、属性或方法注入使用。
-
配置选项:设置应用程序的各种配置选项,如数据库连接字符串、日志记录配置等。
-
添加框架服务:注册MVC、身份验证、信号R等框架服务。
Configure
Configure
方法用于配置应用程序的请求处理管道。通过在这个方法中注册中间件,你可以定义HTTP请求如何被处理。
- 注册中间件:将中间件组件添加到请求处理管道中,以便它们可以在请求到达最终处理程序(如控制器)之前或之后执行特定的逻辑。
- 配置中间件顺序:中间件的执行顺序由它们在
Configure
方法中的注册顺序决定。先注册的中间件会先处理请求,后注册的中间件会后处理请求。 - 设置路由:定义应用程序的路由规则,以便将请求映射到相应的控制器和动作。
MapControllers
在 .NET 6.0 及更高版本中,ASP.NET Core 的中间件配置有所简化。特别是,UseRouting 和 UseEndpoints 方法被合并到了 MapControllers 和其他 Map 方法中。这使得配置更加简洁和直观。
// 这是.NetCore 3.1的写法
app.UseRouting(); // 配置路由
app.UseAuthentication(); // 配置身份验证
app.UseAuthorization(); // 配置授权
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
// 这是.NET 6.0的写法
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
在 .NET 6.0 及更高版本中,MapControllers 方法不仅映射了控制器路由,还隐式地包含了路由和终结点的配置。这意味着你不再需要显式调用 UseRouting 和 UseEndpoints,因为 MapControllers 会自动处理这些步骤