Azure Function报错无法绑定String类型id参数问题排查
报错根因
该参数绑定错误和Todo类的Id属性类型、全局items变量没有关联,问题出在HttpTrigger特性的配置写法错误。
HttpTrigger特性的构造函数中,第二个参数开始的params string[]类型入参仅用于指定允许的HTTP请求方法,路由模板必须通过Route属性显式赋值。你当前直接把"todo/{id}"作为第三个位置参数传入,运行时会将其识别为一个自定义HTTP方法名,不会将其注册为路由规则。函数最终使用默认路由api/GetTodoById,路径中不存在{id}占位符,运行时无法找到string id参数的绑定来源,就会抛出参数绑定失败的索引错误。
修复方案
修改HttpTrigger特性的配置,显式给Route属性赋值目标路由模板即可,修正后的完整代码如下:
public class Todo { public string Id { get; set; } = Guid.NewGuid().ToString("n"); public DateTime CreatedTime { get; set; } = DateTime.UtcNow; public string TaskDescription { get; set; } public bool IsCompleted { get; set; } } private static List<Todo> items = new List<Todo>(); [FunctionName("GetTodoById")] public static IActionResult GetTodoById( [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "todo/{id}")] HttpRequest request, ILogger logger, string id) { var todo = items.FirstOrDefault(t => t.Id == id); if (todo == null) { return new NotFoundResult(); } return new OkObjectResult(todo); }
补充说明
- 修复后函数的访问路径变更为
<函数应用域名>/api/todo/{id},不再使用默认路径/api/GetTodoById - 进程内(In-process)托管模型的Azure Functions支持直接按参数名匹配路由占位符,绑定到string、int、Guid等简单类型参数,不需要额外添加
[FromRoute]类的绑定特性,路由配置正确即可自动完成绑定
内容的提问来源于stack exchange,提问作者FromThisLaptop
相关产品推荐
相关产品推荐

