如何在C#代码中读取Azure Function App的functionTimeout配置值
配置属性说明
是的,host.json中的functionTimeout不属于默认注入的环境变量,它是Azure Functions运行时读取的宿主级全局配置项,需要通过对应运行时模型的配置接口读取。
C#代码读取方案
根据你使用的Azure Functions运行时模型,对应两种读取方式:
1. 进程内(In-Process)模型
直接通过构造函数注入IConfiguration读取即可:
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Extensions.Http; using Microsoft.Extensions.Configuration; using System; public class TimeoutReadFunction { private readonly IConfiguration _config; // 构造函数注入配置实例 public TimeoutReadFunction(IConfiguration config) { _config = config; } [FunctionName("GetTimeoutConfig")] public IActionResult Run( [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req) { // 直接按键名读取host.json的顶层配置 string timeoutStr = _config.GetValue<string>("functionTimeout"); TimeSpan timeout = TimeSpan.Parse(timeoutStr); return new OkObjectResult($"当前配置的超时时间为{timeout.TotalMinutes}分钟"); } }
2. 隔离进程(Isolated Worker)模型
隔离模型下host.json配置会挂载到AzureFunctionsJobHost节点下,读取路径需要调整:
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.Functions.Worker; using Microsoft.Extensions.Configuration; using System; public class TimeoutReadFunction { private readonly IConfiguration _config; public TimeoutReadFunction(IConfiguration config) { _config = config; } [Function("GetTimeoutConfig")] public IActionResult Run( [HttpTrigger(AuthorizationLevel.Function, "get")] HttpRequest req) { // 增加配置节点前缀 string timeoutStr = _config.GetValue<string>("AzureFunctionsJobHost:functionTimeout"); TimeSpan timeout = TimeSpan.Parse(timeoutStr); return new OkObjectResult($"当前配置的超时时间为{timeout.TotalMinutes}分钟"); } }
注意事项
- 本地测试时需要将
host.json文件的「复制到输出目录」属性设置为「如果较新则复制」,否则本地运行会读取不到配置 - 消费计划下
functionTimeout最大有效值为10分钟,弹性计划/专用计划最大有效值为60分钟,读取到的数值会和平台允许的最大值对齐
内容的提问来源于stack exchange,提问作者Konrad
相关产品推荐
相关产品推荐

