当前位置: 首页 > news >正文

program.cs文件详解

在ASP.NET Core 中,

Program.cs是整个应用的入口点(类似 C# 控制台程序的

Main方法),负责启动应用、配置服务和请求处理管道。你提供的代码是一个最基础的 Web API 项目的

Program.cs,下面逐行解释含义、作用及使用方式:

一、逐行代码解析

1. var builder = WebApplication.CreateBuilder(args);

  • 含义:创建一个WebApplicationBuilder对象(简称builder),它是应用的 “配置器”,负责管理应用的服务注册和初始配置。
  • 作用:builder就像一个 “工具箱”,你可以通过它添加各种功能(如数据库连接、认证授权、日志等)到应用中。
  • args:接收命令行参数(比如启动时指定端口dotnet run --urls "http://localhost:5000")。

2. builder.Services.AddControllers();

  • 含义:向应用的 “服务容器”(依赖注入容器)添加MVC 控制器支持。
  • 作用:Web API 的核心功能是通过控制器(Controller)处理 HTTP 请求(如GET/POST),这行代码确保应用能识别并运行控制器中的方法。

3. builder.Services.AddEndpointsApiExplorer();

  • 含义:添加 “API 端点探索器” 服务。
  • 作用:用于Swagger 文档生成(后面的AddSwaggerGen依赖它),帮助 Swagger 识别你的 API 接口信息(如路径、参数、返回值)。

4. builder.Services.AddSwaggerGen();

  • 含义:添加 Swagger 生成器服务。
  • 作用:自动生成 API 的 OpenAPI 文档(即 Swagger 文档),在开发时可以通过 Swagger UI(一个网页)直观地测试 API(类似 Postman 的功能)。

5. var app = builder.Build();

  • 含义:通过builder构建一个WebApplication对象(简称app),它代表 “运行中的应用”。
  • 作用:app负责管理HTTP 请求的处理流程(即 “中间件管道”),所有对应用的请求都会经过这个管道处理。

6. 环境判断与 Swagger 配置

csharp

if (app.Environment.IsDevelopment())
{app.UseSwagger();    // 启用Swagger文档生成app.UseSwaggerUI();  // 启用Swagger UI网页(默认地址:/swagger)
}
  • 含义:判断当前环境是否为 “开发环境”(通过ASPNETCORE_ENVIRONMENT环境变量配置,默认开发环境是Development)。
  • 作用:只在开发环境启用 Swagger(生产环境通常不需要暴露 Swagger UI),方便开发者调试 API。

7. app.UseHttpsRedirection();

  • 含义:添加 “HTTPS 重定向” 中间件。
  • 作用:自动将 HTTP 请求(如http://localhost:5000)重定向到 HTTPS(https://localhost:5001),提升安全性。

8. app.UseAuthorization();

  • 含义:添加 “授权” 中间件。
  • 作用:用于验证请求的合法性(比如检查用户是否登录、是否有权限访问某个接口),配合认证服务(如 JWT)使用。

9. app.MapControllers();

  • 含义:将控制器的接口(如[HttpGet("api/users")])映射到请求管道中。
  • 作用:告诉应用 “当收到 HTTP 请求时,根据 URL 和 HTTP 方法(GET/POST 等)找到对应的控制器方法来处理”。

10. app.Run();

  • 含义:启动应用,开始监听 HTTP 请求。
  • 作用:应用进入 “运行状态”,等待客户端(如浏览器、前端)发送请求并处理。

二、Program.cs的核心作用简单说,

Program.cs是ASP.NET Core 应用的 “启动配置中心”,主要做两件事:

  1. 注册服务(通过builder.Services):告诉应用 “你需要哪些功能”(如数据库、日志、认证等),这些功能会被放入 “服务容器”,供整个应用随时使用。
  2. 配置管道(通过app):告诉应用 “如何处理 HTTP 请求”(如先重定向 HTTPS、再验证权限、最后交给控制器处理),这个流程由 “中间件” 组成,按顺序执行。

三、如何使用Program.cs?在实际开发中,你需要根据业务需求修改

Program.cs,常见场景:

1. 添加数据库服务(如 EF Core)如果你的应用需要连接数据库,需要在

builder.Services中注册数据库上下文:

// 注册SQL Server数据库上下文
builder.Services.AddDbContext<AppDbContext>(options =>options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

2. 配置跨域(CORS)

如果前端和后端不在同一个域名下,需要添加跨域服务和中间件:

// 注册跨域服务
builder.Services.AddCors(options =>
{options.AddPolicy("AllowFrontend", policy =>{policy.WithOrigins("http://localhost:3000") // 允许前端域名.AllowAnyHeader().AllowAnyMethod();});
});// 在管道中启用跨域中间件(注意顺序:要在UseAuthorization之前)
app.UseCors("AllowFrontend");

3. 添加认证服务(如 JWT)

如果需要用户登录验证,注册 JWT 认证服务:

// 注册JWT认证
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options =>{options.TokenValidationParameters = new TokenValidationParameters{ValidateIssuer = true,ValidateAudience = true,// 其他验证配置...};});// 管道中启用认证中间件(必须在UseAuthorization之前)
app.UseAuthentication();
app.UseAuthorization(); // 已有的授权中间件

四、什么时候需要用Program.cs?

只要开发ASP.NET Core 应用(Web API、MVC 网站等),就必须使用Program.cs。任何需要修改应用启动行为的场景,都需要在这里配置:

  • 新增功能(如数据库、缓存、消息队列)→ 需要注册对应的服务;
  • 调整请求处理流程(如添加日志、异常处理、跨域)→ 需要添加对应的中间件;
  • 环境相关配置(如开发 / 生产环境的不同行为)→ 在这里通过app.Environment判断。

总结

Program.cs是ASP.NET Core 的 “启动大脑”,负责:

  • 告诉应用 “有哪些工具可用”(服务注册);
  • 告诉应用 “如何处理请求”(管道配置)。

开发时,你不需要 “实例化” 或 “调用” 这个类,而是通过修改其中的代码来配置应用的启动逻辑,让应用按照你的需求运行。

http://www.dtcms.com/a/560872.html

相关文章:

  • 深圳市企业网站seo做东西的网站有那些
  • 京东测开面经整理(日常实习)
  • 大文件上传
  • 做ppt找图片网站推广网发布的信息准确吗
  • Linux内核POSIX文件锁机制深度解析
  • 从“CPU 烧开水“到优雅暂停:Go 里 sync.Cond 的正确打开方式
  • 大模型系列——Excel数据治理新思路:引入智能体实现自动纠错【Python+Agent】
  • Pyppeteer 使用教程
  • React性能优化:useMemo vs useCallback
  • Onsemi展示了垂直GaN-on-GaN半导体
  • 专业机票网站建设禅城区建设局网站
  • Java 日志演进:一文读懂主流框架
  • 第3章 变量与数据类型
  • pyside6 qt 事件循环
  • Secertpad搭建
  • 吞吐量、延迟、内存:深入理解垃圾回收的“三元悖论”
  • List接口和常用方法
  • 计算机一级考试网站怎么做用织梦系统做网站产权
  • Java 数据结构第二十八期:反射、枚举以及 lambda 表达式
  • Linux 磁盘分区与系统监控完全指南
  • 是普通网站地图好还是rss地图好一点网站建设申请费用
  • 使用Graphics2D创建滑块验证码
  • Flutter provide框架内部实现原理刨析
  • 关于rpm,yum,apt
  • 15.6.Bat脚本编写
  • 景德镇网站制作广告法
  • 可以做头像的网站网站区域名是什么
  • 新手记录使用uniapp-x开发鸿蒙应用
  • Linux+Apache+MySQL+PHP 架构下搭建 Discuz 社区论坛
  • 可替代Github Copilot的插件分享CodeGeeX