如何配置运行在IIS上的.NET 7 WebAPI?从.NET 3.1迁移配置指引
.NET 7 应用部署 IIS 配置指南
现有代码优化
先梳理下现有代码里可简化的地方,.NET 7 的 WebApplication.CreateBuilder 已经默认处理了很多配置,无需重复编写:
1. 简化初始化逻辑
你手动创建 WebApplicationOptions、获取执行程序集的代码可以直接删掉,WebApplication.CreateBuilder(args) 会自动处理内容根路径、应用名称这些参数,默认逻辑和你写的完全一致。
2. 配置文件加载简化
.NET 7 默认已经加载了 appsettings.json、appsettings.{环境名}.json 和环境变量,所以那段手动调用 SetBasePath、AddJsonFile 的代码可以去掉,只保留 hostsettings.json 的加载即可(如果这个文件是你额外需要的)。
3. 冗余代码清理
代码里重复调用了 builder.Services.AddControllers(),留一次带 AddJsonOptions 的就行,另一次直接删掉。
IIS 部署关键配置
要把.NET 7 应用部署到 IIS,这些核心点必须注意:
- 安装.NET 7 运行时:服务器上必须安装 ASP.NET Core Runtime 7.0,否则 IIS 无法托管你的应用。
- 配置应用程序池:新建应用程序池时,.NET CLR 版本选择「无托管代码」——因为 ASP.NET Core 是自托管架构,IIS 仅作为反向代理,不需要加载.NET Framework 的托管代码。
- 验证 ASP.NET Core 模块:服务器上必须存在
ASP.NET Core Module v2,安装.NET 运行时时会自动部署,也可以通过 IIS 管理器的「模块」功能检查。 - 发布应用:发布时选「文件夹」目标,部署模式推荐用「框架依赖」,这样发布包体积小,服务器装了对应运行时就能运行;如果要独立部署可选「自包含」,但包体积会大很多。
优化后的完整代码
var builder = WebApplication.CreateBuilder(args); // 加载额外的hostsettings.json(不需要的话可以删掉) builder.Configuration.AddJsonFile("hostsettings.json", optional: true, reloadOnChange: true); // 如果需要把应用作为Windows服务运行,保留这段;纯IIS托管可删掉 if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { builder.Host.UseWindowsService(); } // CORS配置:生产环境别用AllowAnyOrigin,指定具体域名更安全 builder.Services.AddCors(options => { options.AddDefaultPolicy(policy => { policy.AllowAnyOrigin(); policy.AllowAnyHeader(); policy.AllowAnyMethod(); }); }); // 控制器配置,包含JSON序列化选项 builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = null; }); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddLogger(); // 确保这个自定义扩展方法在.NET 7中兼容 var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseCors(); app.MapControllers(); app.Run();
部署步骤快速梳理
- 在 Visual Studio 里右键项目选「发布」,目标选「文件夹」,设置好发布路径后完成发布。
- 把发布后的所有文件复制到服务器的目标目录。
- 打开 IIS 管理器,新建站点:设置站点名称,物理路径指向服务器上的发布目录,绑定好域名/端口。
- 将站点的应用程序池切换为你新建的、CLR 版本为「无托管代码」的池。
- 访问站点地址,验证是否正常运行。
内容的提问来源于stack exchange,提问作者san_dev18
相关产品推荐
相关产品推荐

