.NET 9 Azure Functions JSON参数大小写匹配问题求助
.NET 9 Azure Functions JSON大小写忽略失效解决方案
问题根源
Azure Functions使用ConfigureFunctionsWebApplication时,默认的JSON序列化配置并未完全覆盖函数参数绑定的反序列化逻辑,导致小写属性名的JSON请求无法正确映射到实体类属性,出现值被设为默认值(如0)的情况。
可行方案
1. 全局配置Worker级别的JSON序列化选项
在Program.cs中,通过配置WorkerOptions指定函数工作进程使用的序列化器,确保大小写忽略规则生效:
var host = new HostBuilder() .ConfigureFunctionsWebApplication(builder => { builder.Services.Configure<WorkerOptions>(options => { options.Serializer = new JsonObjectSerializer(new JsonSerializerOptions { PropertyNameCaseInsensitive = true, // 可按需添加其他序列化配置,如WriteIndented等 }); }); }) .Build(); host.Run();
2. 显式指定反序列化选项
如果全局配置未生效,可在函数参数反序列化时直接指定JsonSerializerOptions,以Math.cs中的函数为例:
[FunctionName("Add")] public async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, ILogger log) { var requestBody = await new StreamReader(req.Body).ReadToEndAsync(); // 反序列化时启用大小写忽略 var addRequest = JsonSerializer.Deserialize<AddRequest>(requestBody, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); if (addRequest == null) { return new BadRequestObjectResult("Invalid request body"); } var result = addRequest.Number1 + addRequest.Number2; return new OkObjectResult(new { Result = result }); }
3. 使用[FromBody]特性绑定参数(推荐)
直接绑定实体类参数时,添加[FromBody]特性并配合全局配置:
[FunctionName("Add")] public IActionResult Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] [FromBody] AddRequest request, ILogger log) { if (request == null) { return new BadRequestObjectResult("Invalid request body"); } var result = request.Number1 + request.Number2; return new OkObjectResult(new { Result = result }); }
4. 更新Functions SDK包
确保项目中Microsoft.Azure.Functions.Worker和Microsoft.Azure.Functions.Worker.Extensions.Http包为最新稳定版,规避早期.NET 9版本的配置bug。
内容的提问来源于stack exchange,提问作者SuperMe
相关产品推荐
相关产品推荐

