将 ASP.NET Core 部署到 Azure App Service,是托管现代 .NET 网站或 API 的实用方法,无需管理完整的 Windows 或 Linux 虚拟机。Azure App Service 提供托管式应用程序托管、部署工具、HTTPS 支持、监控集成以及扩展功能。.
然而,将应用程序上线仅仅是第一步。要实现可靠的生产环境部署,还需要安全的配置、身份管理、数据库连接、部署控制、监控以及恢复策略。.
本指南介绍了如何将 ASP.NET Core 部署到 Azure App Service、配置环境设置、使用 Azure Key Vault 保护机密、启用 HTTPS,以及为生产环境流量扩展应用程序。.

Azure 应用服务部署:快速概述
| 组件 | 目的 |
|---|---|
| ASP.NET Core | Web 应用程序或 API 框架 |
| Azure 应用服务 | 托管式应用程序托管 |
| 应用服务计划 | 基础计算能力与定价层级 |
| Azure CLI | 部署与资源管理 |
| 应用程序设置 | 特定环境的配置 |
| 托管身份 | 无需密码即可访问受支持的 Azure 资源 |
| Azure Key Vault | 集中式密钥管理 |
| Application Insights | 应用程序遥测与诊断 |
| 部署槽位 | 分阶段发布与流量切换 |
| 自动扩展 | 调整支持的托管容量 |
推荐的工作流程: 创建应用程序,选择托管环境,进行部署,配置密钥和HTTPS,验证生产环境中的运行情况,并建立监控和扩展规则。.
1. 为什么要将 ASP.NET Core 托管在 Azure 应用服务上?
Azure 应用服务旨在托管 Web 应用程序和 API,而无需开发人员维护底层的服务器操作系统。.
它适用于许多 ASP.NET Core 工作负载,包括商业网站、REST API、客户门户、内部应用程序以及数据库驱动的服务。.
主要优势包括:
- 托管式托管基础设施
- 对兼容的 .NET 运行时环境的支持
- Windows 和 Linux 托管选项
- HTTPS 和自定义域名支持
- 应用程序配置管理
- 部署集成
- 监控与诊断
- 符合条件的计划中的扩展选项
不过,App Service 与传统的虚拟机并不完全相同。对于需要完全控制操作系统、使用不受支持的后台服务或进行特殊系统级配置的应用程序,可能需要采用另一种托管模式。.
我们的 Azure 虚拟机与应用服务的对比 解释了在基础设施控制、可扩展性和运维责任方面的差异。.
2. ASP.NET Core 部署的先决条件
开始之前,请准备以下物品:
- 一个有效的 Azure 订阅
- 与您的应用程序兼容的 .NET SDK
- 已安装并完成身份验证的 Azure CLI
- 一个 ASP.NET Core 应用程序或 API
- 创建或更新 Azure 资源的权限
- 一个部署区域
- 应用程序配置和数据库访问方案
本教程以 .NET 10 为例。现有应用程序可能针对其他受支持的 .NET 版本,但 Azure 运行时和应用程序依赖项必须兼容。.
在部署之前,请先检查可用的应用服务运行时,而不是假设每个操作系统和托管配置都支持所有 .NET 版本。.
3. 创建一个新的 ASP.NET Core 应用程序
打开终端,创建一个示例 ASP.NET Core Web 应用程序:
dotnet new webapp -n AzureAspNetDemo --framework net10.0
cd AzureAspNetDemo
在本地运行该应用程序:
dotnet run
打开终端中显示的本地 URL。.
在尝试部署之前,请确认应用程序能否成功启动。.
对于现有应用程序,请验证项目能否顺利构建,并确保未将特定环境的设置硬编码。.
4. 选择 Windows 或 Linux 应用服务
Azure 应用服务支持在 Windows 和 Linux 上运行兼容的 ASP.NET Core 应用程序。.
正确的选择应取决于应用程序的要求,而不是基于“所有 .NET 应用程序都需要 Windows Server”这一假设。.
在适当的情况下选择 Linux
Linux 应用服务适用于不依赖于 Windows 特定组件的现代跨平台 ASP.NET Core 应用程序。.
在需要时选择 Windows
对于依赖于 Windows 特定功能、兼容的旧版集成或完整 .NET Framework 的应用程序,可能需要使用 Windows App Service。.
ASP.NET Core 虽然是跨平台的,但应用程序仍可能包含一些会限制其运行环境的依赖项。.
| 申请要求 | 待评估的托管方案 |
|---|---|
| 跨平台 ASP.NET Core API | Linux 或 Windows 应用服务 |
| 现代 .NET 网站 | Linux 或 Windows 应用服务 |
| Windows 特有的依赖项 | Windows 应用服务 |
| 完整的 .NET Framework 应用程序 | Windows 应用服务 |
| 完整的操作系统管理 | Azure 虚拟机或其他 VPS |
5. 使用 Azure CLI 部署 ASP.NET Core
对于偏好基于终端的工作流的开发人员而言,Azure CLI 提供了一种便捷的部署方法。.
首先,请登录:
az login
请确认您要订阅的内容:
az account show
如有必要,请选择正确的订阅:
az account set --subscription "YOUR_SUBSCRIPTION_ID"
若要进行简单的初始部署,请在 ASP.NET Core 项目目录下运行以下命令:
az webapp up \
--name 您的唯一应用名称 \
--resource-group rg-aspnet-production \
--location eastus \
--os-type linux \
--runtime "DOTNETCORE:10.0" \
--sku B1
请将应用程序名称、资源组和区域替换为适合您环境的值。.
应用程序名称必须符合 Azure 命名规则。.
此命令是一个部署示例。请确认所选的运行时、区域和定价层在您的订阅中可用。.
此处将 B1 层级作为付费托管服务的示例,并非适用于所有生产环境的通用建议。.
部署完成后,Azure CLI 会显示应用程序的端点。.
打开该网址,并确认应用程序已成功加载。.
6. 部署已发布的 ASP.NET Core 应用程序
为了实现更受控的部署,请在上传部署包之前先发布应用程序。.
运行:
dotnet publish -c Release -o ./publish
创建一个包含发布目录内容的 ZIP 压缩包,而不是将发布目录本身放在压缩包的根目录下。.
在 Linux 或 macOS 上:
cd publish
zip -r ../deploy.zip .
cd ..
在 Windows PowerShell 中,请使用适当的归档命令,确保将已发布的文件保留在 ZIP 文件的根目录下。.
将包部署到现有的 Azure 应用服务中:
az webapp deploy \
--resource-group rg-aspnet-production \
--name your-unique-app-name \
--src-path deploy.zip \
--type zip
预构建的 ASP.NET Core 应用程序采用 ZIP 部署方式,从而避免了对服务器端编译的依赖。.
请确保已发布的运行时目标与应用服务配置兼容。.
7. 配置 ASP.NET Core 环境变量
生产环境中的应用程序应将特定于环境的配置与应用程序源代码分离。.
ASP.NET Core 支持通过环境变量和其他提供程序进行配置。.
Azure 应用服务中的应用程序设置会以环境变量的形式提供给应用程序。.
例如:
az webapp config appsettings set \
--resource-group rg-aspnet-production \
--name your-unique-app-name \
--settings ASPNETCORE_ENVIRONMENT=Production
ASP.NET Core 还可以使用双下划线来读取分层配置值。.
例如,一个名为 ConnectionStrings__DefaultConnection 可以映射到相应的配置部分。.
但是,不应将数据库密码和 API 密钥直接嵌入部署脚本中,也不应将其提交到源代码控制系统。.
在适当的情况下,请使用托管身份和 Azure Key Vault。.
8. 为 Azure 应用服务启用托管身份
托管身份使托管在 Azure 上的应用程序能够对受支持的 Azure 资源进行身份验证,而无需在源代码中维护应用程序凭据。.
启用系统分配的托管身份:
az webapp identity assign \
--resource-group rg-aspnet-production \
--name your-unique-app-name
该应用程序现在拥有一个由 Azure 管理的身份,可被授予对受支持资源的访问权限。.
但是,启用该身份并不会自动授予对 Key Vault、数据库或存储帐户的权限。.
仅授予应用程序所需的、针对特定资源的权限。.
9. 使用 Azure Key Vault 保护机密
Azure Key Vault 可对 API 密钥和数据库凭据等敏感配置值进行集中管理。.
一种常见的生产模式是:
- 创建一个 Azure Key Vault。.
- 将应用程序密钥存储在密钥库中。.
- 在应用服务上启用托管身份。.
- 授予该身份读取所需密钥的权限。.
- 通过 App Service 配置引用该密钥。.
App Service Key Vault 引用可以采用以下格式:
@Microsoft.KeyVault(
SecretUri=https://YOUR-VAULT.vault.azure.net/secrets/YOUR-SECRET/
)
实际的应用程序设置中应包含以支持的单行格式表示的引用。.
对于使用 Azure 基于角色的访问控制 (RBAC) 的 Azure Key Vault,请为托管身份授予一个范围限定在所需金库或密钥上的适当“读取密钥”角色。.
对于使用访问策略的存储库,请配置相应的密钥权限。.
配置完成后,请验证应用程序能否解析该引用,同时确保在日志或错误消息中不会泄露密钥值。.
10. 将 ASP.NET Core 连接到 Azure SQL 数据库
许多 ASP.NET Core 应用程序都需要关系型数据库。.
对于需要托管型、与 SQL Server 兼容的数据库服务的应用程序而言,Azure SQL Database 是一个可选方案。.
建立生产数据库连接时应考虑以下方面:
- 数据库身份验证
- 网络访问限制
- 加密
- 连接池
- 重试行为
- 模式迁移步骤
- 备份和恢复要求
在应用程序和数据库配置支持的情况下,Microsoft Entra 身份验证和托管身份可减少对存储在数据库中的密码的依赖。.
不要仅仅为了简化部署,就自动将数据库暴露给所有公共IP地址。.
对于 Entity Framework Core 应用程序,应通过受控的发布流程应用数据库迁移,而不是假设每次应用程序启动时都应修改生产环境的数据库模式。.
11. 配置自定义域名和 HTTPS
Azure 应用服务会提供一个默认的应用程序主机名,但生产环境中的网站通常会使用自定义域名。.
要配置一个:
- 验证域名所有权。.
- 创建所需的 DNS 记录。.
- 将自定义主机名添加到应用服务中。.
- 配置一个合适的 TLS 证书。.
- 启用仅限 HTTPS 访问。.
- 测试重定向和证书有效性。.
证书的可用性及支持的选项取决于主机套餐和域名配置。.
使用 Azure CLI 启用仅 HTTPS 访问:
az webapp update \
--resource-group rg-aspnet-production \
--name your-unique-app-name \
--https-only true
对于在 Azure 反向代理基础设施后运行的 ASP.NET Core 应用程序,请确保已为托管环境正确配置了转发标头和与 HTTPS 相关的中间件。.
请不要以为启用 HTTPS 就能自动解决所有身份验证回调或重定向配置问题。.
12. 配置身份验证和授权
生产环境中的应用程序应保护管理和私有应用程序的端点。.
Azure 应用服务支持内置身份验证功能,而 ASP.NET Core 还提供了应用程序级别的身份验证和授权机制。.
常见的方法包括:
- Microsoft Entra ID 身份验证
- OpenID Connect
- ASP.NET Core Identity
- 面向特定应用的授权策略
- API 令牌验证
选择一种适合您应用程序架构的身份验证模型。.
身份验证用于确认用户的身份,而授权则用于确定用户可以访问哪些资源。.
对于企业应用,应实施最小权限访问控制,并保护敏感路由。.
13. 配置 Azure 应用服务缩放
Azure 应用服务通过受支持的应用服务计划提供扩展功能。.
两种重要的方法是垂直扩展和水平扩展。.
扩展:增加实例资源
垂直扩展是指迁移到计算能力或内存容量更大的方案。.
当应用程序的每个实例始终需要更多资源时,这可能会派上用场。.
横向扩展:增加实例数量
水平扩展是指运行更多应用程序实例。.
当应用程序设计为在多个实例上运行时,这有助于支持流量的增加。.
配置自动缩放
受支持的应用服务计划可以使用自动缩放功能,其可用性和配置取决于所选的层级和缩放模型。.
潜在信号包括:
- CPU利用率
- 支持的内存相关指标
- HTTP 请求模式
- 应用程序性能
- 计划中的交通调整
自动扩展并不能替代高效的应用程序代码或数据库优化。.
在选择扩展阈值之前,应在接近实际的并发环境下测试应用程序的行为。.
14. 确保 ASP.NET Core 应用程序安全地扩展
当应用程序实例不依赖于本地服务器状态时,水平扩展的效果最佳。.
对于多实例应用程序:
- 使用外部数据库来存储应用程序的持久化数据。.
- 将上传的文件存储在持久的外部存储中。.
- 在适当的情况下,可考虑采用分布式缓存。.
- 在需要时共享 ASP.NET Core 数据保护密钥。.
- 避免在不同实例之间依赖内存中的会话状态。.
- 审查后台任务的协调情况。.
- 监控数据库连接限制。.
对于使用 Cookie 身份验证的应用程序,当请求在实例或部署槽之间传输时,数据保护密钥的一致性尤为重要。.
会话亲和性虽然可以缓解一些眼前的问题,但不应取代设计合理的分布式架构。.
15. 使用 Application Insights 监控 ASP.NET Core
Application Insights 为受支持的 .NET 应用程序提供了应用程序性能监控和诊断功能。.
有用的遥测数据包括:
- 请求时长
- 请求失败
- 依赖项性能
- 应用程序异常
- 可用性检查
- 分布式追踪
- 与资源相关的绩效指标
在应用程序出现生产环境问题之前,请配置监控。.
对于现代 ASP.NET Core 应用程序,请评估受支持的 Azure Monitor OpenTelemetry 监控配置以及当前推荐的集成方法。.
请避免记录连接字符串、访问令牌、个人信息或其他敏感数据。.
16. 使用部署槽实现更安全的发布
部署槽可让受支持的 App Service 计划维护独立的应用程序环境,例如生产环境和预发布环境。.
典型的发布工作流如下:
- 将新版本的应用程序部署到预发布环境。.
- 配置插槽的特定设置。.
- 运行健康检查和烟雾测试。.
- 启动预发布应用程序。.
- 准备就绪后,将测试环境与生产环境对调。.
- 监控生产环境的发布。.
- 如果出现问题,请采用适当的回滚程序。.
并非所有定价层级都提供部署槽位。.
请确认哪些设置会在插槽切换时随之移动,哪些设置会保留在特定插槽上。.
数据库迁移和外部状态的变化需要进行额外规划,因为插槽交换并不会自动撤销这些变化。.
17. 优化 Azure 应用服务托管成本
Azure 应用服务的费用取决于托管方案、已配置的容量、操作系统、区域、扩展配置以及支持服务。.
其他费用可能包括:
- Azure SQL 数据库
- Azure 存储
- Application Insights 和 Log Analytics
- 网络服务
- Key Vault 操作
- 备份与恢复服务
- 其他应用程序依赖项
多个兼容的应用程序可以共享一个应用服务计划,但它们也会共享该计划底层的资源。.
在整合工作负载之前,请评估资源利用率。.
对于需要直接管理服务器的应用场景,Azure 虚拟机虽能提供更多基础设施控制权,但也会带来额外的运维责任。.
我们的 《Azure 虚拟机成本优化指南》介绍了适配规格、预留实例、节省计划、许可以及其他用于降低虚拟机支出的方法。.
18. 何时应考虑采用其他 ASP.NET Core 托管方案?
对于能够从 Microsoft 云集成和托管平台功能中获益的应用程序而言,Azure 应用服务极具吸引力。.
不过,并非每个 ASP.NET Core 应用程序都需要使用 Azure 专有的服务。.
对于较为简单的网站、独立的商业应用程序以及常规的 .NET 托管需求,第三方托管服务商可能在成本、控制权和技术支持方面提供不同的权衡方案。.
AccuWeb 主机服务 以及 Winhost 在评估兼容 ASP.NET 的托管服务时,这些都是值得考虑的候选方案。.
在选择方案之前,请确认该方案是否支持具体的 .NET 运行时、应用程序架构、数据库要求以及部署方式。.
不要以为,凡是宣传提供 ASP.NET 托管服务的供应商,就一定支持所有最新的 ASP.NET Core 版本或所有应用程序依赖项。.
19. ASP.NET Core 托管方案对比
AccuWeb 主机服务
AccuWeb 主机服务 这对正在比较 Windows 托管、VPS 选项以及受支持的 ASP.NET 应用程序的开发人员来说很有参考价值。.
查看可用的 .NET 运行时版本、IIS 配置、SQL Server 兼容性以及技术支持范围。.
Winhost
Winhost 该服务专注于基于 Windows 的网站托管,对于兼容的 ASP.NET 应用程序而言,值得深入了解。.
请确认目标应用程序是否需要超出共享主机环境所提供功能范围的其他功能。.
卡马特拉
卡马特拉 当开发人员需要可配置的 Windows 或 Linux 虚拟服务器基础设施,并希望对操作系统拥有更大的控制权时,这可能是一个合适的选择。.
与 Azure 应用服务相比,该模型对服务器管理的要求有所不同。.
KnownHost
KnownHost 是评估VPS托管和托管基础设施服务的另一种选择。.
请确认所选方案的具体操作系统、.NET 部署支持情况以及管理职责。.
| 托管平台 | 主要评估角度 |
|---|---|
| Azure 应用服务 | 托管式 ASP.NET Core 应用程序平台 |
| AccuWeb 主机服务 | Windows 和 ASP.NET 托管选项 |
| Winhost | 基于 Windows 的网站托管 |
| 卡马特拉 | 可配置的 Windows/Linux 云服务器 |
| KnownHost | VPS 和托管基础设施 |
应综合比较应用程序兼容性、数据库托管、部署访问、安全责任、备份以及技术支持等因素,而不是仅依赖广告中宣传的服务器规格。.
如需了解更多的基础设施选项,请阅读我们的 最佳云托管解决方案指南.
20. Azure 应用服务常见的部署错误
应用程序返回 HTTP 500 错误
检查应用程序的启动日志、环境配置、依赖项初始化以及运行时兼容性。.
HTTP 502 或 503 错误
检查应用程序的启动情况、工作进程状态、资源耗尽情况、部署状态以及平台诊断信息。.
应用程序在本地运行正常,但在 Azure 上运行失败
验证环境变量、Linux 系统中区分大小写的路径、连接字符串、外部依赖项以及操作系统兼容性。.
数据库连接失败
检查数据库身份验证、防火墙规则、网络访问、连接字符串以及托管身份的权限。.
无法解析 Key Vault 引用
验证托管身份配置、Vault 授权、网络限制以及密钥引用语法。.
身份验证重定向循环
检查 HTTPS 设置、重定向 URI、转发头、身份验证中间件以及代理配置。.
扩展后应用程序运行变慢
调查共享数据库的瓶颈、缓存行为、会话状态、数据保护配置以及下游依赖限制。.
部署槽位交换导致错误
审查与插槽相关的配置、数据库兼容性、预热行为以及应用程序启动要求。.
生产环境部署检查清单
- 请使用受支持的 .NET 运行时。.
- 根据应用程序的要求,选择 Windows 或 Linux。.
- 发布一个生产版本。.
- 请将敏感配置置于源代码控制之外。.
- 在适当的情况下启用托管身份。.
- 使用 Azure Key Vault 存储应用程序密钥。.
- 配置自定义域名和 HTTPS。.
- 保护身份验证和授权流程。.
- 请使用持久化存储来存储持久性数据。.
- 配置健康检查和应用程序监控。.
- 测试可扩展性和并发性。.
- 在支持的情况下,请使用分阶段部署。.
- 文档回滚和数据库恢复流程。.
- 查看当月的完整主机费用。.
常见问题解答
ASP.NET Core 可以在 Azure 应用服务上运行吗?
是的。Azure 应用服务支持在 Windows 和 Linux 托管环境中运行兼容的 ASP.NET Core 应用程序。.
托管 ASP.NET Core 需要 Windows Server 吗?
不一定。现代的 ASP.NET Core 应用程序是跨平台的,尽管某些特定于 Windows 的依赖项可能需要 Windows 环境来托管。.
如何使用 Azure CLI 部署 ASP.NET Core?
使用受支持的部署工作流(例如 az webapp up)进行简单的初始部署,或者发布应用程序并将 ZIP 包部署到现有的 App Service 上。.
Azure 应用服务是否支持 .NET 10?
微软当前的 App Service 快速入门文档介绍了 .NET 10 的部署方法。请确认您所选托管配置中运行时的可用性。.
如何在 Azure 上安全地存储 ASP.NET Core 密钥?
请将 Azure Key Vault 与托管身份以及范围适当的权限结合使用。避免将凭据直接嵌入源代码中。.
Azure 应用服务可以自动扩展吗?
是的,受支持的 App Service 方案提供了自动扩展功能。可用的选项取决于具体的方案和扩展模型。.
不使用 Visual Studio 也能进行部署吗?
是的。无需 Visual Studio,即可使用 Azure CLI、.NET CLI、受支持的 CI/CD 工作流以及其他部署方法。.
我可以在 ASP.NET Core 中使用 Azure SQL Database 吗?
是的。Azure SQL Database 通常与兼容的 ASP.NET Core 应用程序配合使用。请仔细配置身份验证、网络和迁移设置。.
Azure 应用服务与 Azure 虚拟机托管之间有什么区别?
App Service 负责管理更多托管平台的相关事务,而 Azure 虚拟机则提供了更大的操作系统控制权,但需要更多基础设施管理。.
我可以回滚 Azure 应用服务的部署吗?
支持的部署槽位和发布工作流可帮助恢复应用程序的早期版本。外部数据库和状态的变化可能需要单独的恢复流程。.
最终结论:使用生产环境控制部署 ASP.NET Core
Azure 应用服务提供了一个托管平台,用于托管现代 ASP.NET Core 应用程序,而无需维护传统的虚拟机。.
要实现可靠的部署,仅发布代码是不够的。开发人员还应配置环境设置、保障密钥安全、保护数据库访问权限、启用 HTTPS、监控应用程序运行状况,并测试扩展行为。.
对于高度依赖 Azure 服务的应用程序,App Service 可以减少基础设施管理工作。对于更简单或更具可移植性的 .NET 应用程序,AccuWeb Hosting、Winhost、Kamatera 以及 KnownHost 这些额外的托管方案值得考虑。.
构建 → 部署 → 配置 → 安全 → 扩展 → 监控。.
最佳的 ASP.NET Core 托管环境,应既能满足您应用程序的技术要求,又能确保运营的安全、可靠和可管理性。.





