Azure Function SQL Binding:如何将请求体参数传入存储过程
解决方案
要实现SQL Binding动态传递请求体中的caseNo参数,核心是利用Azure Functions的绑定表达式,同时简化请求体的解析流程。以下是修改后的完整实现:
1. 定义请求模型类
确保你的Case类与请求体JSON结构匹配,若字段名不一致可通过JsonProperty映射:
using Newtonsoft.Json; public class Case { [JsonProperty("caseNo")] // 若JSON字段为caseNo,类属性用驼峰/大驼峰均可,此处做映射 public string CaseNo { get; set; } // 可添加其他需要的属性 }
2. 修改Azure Function代码
namespace FunctionApp1 { public static class Function1 { [FunctionName("Function1")] // 改为POST方法(GET请求通常不携带请求体),直接绑定Case模型自动完成JSON反序列化 public static async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] Case caseData, [Sql( "ETL.CaseSearch", commandType: System.Data.CommandType.StoredProcedure, // 用绑定表达式引用caseData对象的CaseNo属性,动态传递参数 parameters: "@caseNo={caseData.CaseNo}", connectionStringSetting: "SqlConnectionString")] IEnumerable<object> result, ILogger log) { log.LogInformation("C# HTTP trigger with SQL Input Binding processed a request."); var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(result); return new JsonResult(jsonString); } } }
关键修改说明
- 请求体自动解析:将
HttpTrigger的输入从HttpRequest改为Case类型,Azure Functions会自动将请求体的JSON反序列化为Case对象,省去手动读流和反序列化的代码。 - 动态参数绑定:SQL Binding的
parameters使用{caseData.CaseNo}绑定表达式,运行时会从函数输入的caseData对象中提取CaseNo值,传递给存储过程的@caseNo参数(替代原硬编码值)。 - HTTP方法调整:将触发方法从
get改为post,符合JSON请求体的常规传输规范。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

