.NET 6 Azure Function部署后返回500 OK问题排查请求
1. 配置项未同步部署
本地运行时,EndpointUrl、PrimaryKey、DatabaseName等配置存储在local.settings.json中,但部署到Azure后,这些配置需要手动添加到Function App的应用设置里。如果配置缺失或值错误,会导致Cosmos DB连接失败,触发未捕获异常,最终返回500错误。
2. 变量名错误引发空引用异常
代码中HttpTrigger的参数名为request,但所有返回语句使用的是req.CreateResponse(...)——这会直接导致运行时NullReferenceException。本地调试可能因环境特殊处理未暴露问题,但Azure生产环境会直接返回500错误。
3. Cosmos DB SDK兼容性问题
你使用的IDocumentClient属于旧版Cosmos DB SDK(Microsoft.Azure.DocumentDB),在.NET 6环境下存在兼容性风险。.NET 6推荐使用新版SDK(Microsoft.Azure.Cosmos)的CosmosClient,旧版SDK部署后可能因依赖缺失或运行时环境差异抛出异常。
4. 网络与权限限制
- Azure Function所在的虚拟网络可能未配置允许访问Cosmos DB账户,导致连接超时或被拒绝。
- Function App的托管身份未被授予Cosmos DB的读取权限,访问数据库时被拒绝,触发异常。
5. 函数运行模式不匹配
.NET 6 Azure Functions分为**进程内(In-Process)和隔离进程(Isolated)**两种模式:
- 若项目配置为隔离进程模式,使用
HttpRequestMessage会引发运行时错误——隔离模式下Http触发器参数应为HttpRequestData。 - 本地默认用进程内模式,但部署时误配置为隔离模式,会导致兼容性问题。
6. 异常处理未覆盖所有场景
当DocumentId无法解析为Guid时,Guid.Parse(DocumentId)会抛出FormatException;若req变量未初始化,会先触发空引用异常,无法进入catch块返回BadRequest响应。Azure生产环境会将这类未捕获异常处理为通用500错误。
内容的提问来源于stack exchange,提问作者Garry A

