You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8 Azure Functions中[FromBody]参数绑定失败的解决问询

在.NET 8 Azure Functions Isolated Worker中使用[FromBody]绑定请求体的解决方案

问题原因

你使用的是Azure Functions Isolated Worker模型(从引用的Microsoft.Azure.Functions.Worker系列包和ConfigureFunctionsWebApplication配置可判断),而ASP.NET Core的[FromBody]特性并非该模型的原生绑定特性,直接使用会导致请求体无法正确绑定,参数始终为null。

解决方案

方案1:使用Isolated Worker原生的[RequestBody]特性(推荐)

Isolated Worker模型提供了专门的[RequestBody]特性用于请求体绑定,替换[FromBody]即可解决问题:

  1. 确保项目已引用Microsoft.Azure.Functions.Worker包
  2. 修改函数代码,将[FromBody]替换为[RequestBody]:
[Function("GetAllPriceList")]
public IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = "PriceList/GetAllPriceList")] HttpRequestData req,
    [RequestBody] AccountRequest accountRequest)
{
    if (accountRequest == null)
    {
        return new BadRequestObjectResult("无效的请求体");
    }
    // 业务逻辑处理
    return new OkObjectResult($"获取到AccountId:{accountRequest.AccountId}");
}

方案2:配置启用ASP.NET Core风格绑定(支持[FromBody])

如果坚持要使用[FromBody],可以通过配置启用ASP.NET Core的绑定支持:

  1. 在Program.cs中添加MvcCore配置:
var host = new HostBuilder()
    .ConfigureFunctionsWebApplication()
    .ConfigureServices(services =>
    {
        services.AddMvcCore()
            .AddJsonOptions(options =>
            {
                // 配置JSON序列化规则,确保和请求体格式匹配
                options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
                options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
            });
    })
    .Build();

host.Run();
  1. 修改函数参数为ASP.NET Core的HttpRequest类型,并保留[FromBody]:
[Function("GetAllPriceList")]
public IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Function, "post", Route = "PriceList/GetAllPriceList")] HttpRequest req,
    [FromBody] AccountRequest accountRequest)
{
    if (accountRequest == null)
    {
        return new BadRequestObjectResult("无效的请求体");
    }
    // 业务逻辑处理
    return new OkObjectResult($"获取到AccountId:{accountRequest.AccountId}");
}

关键注意事项

  • 确保请求的Content-Type头设置为application/json,Postman中需正确配置该头信息,否则绑定会失败
  • 若JSON键名和类属性名存在大小写差异,可通过配置JsonSerializerOptions.PropertyNameCaseInsensitive = true来忽略大小写匹配

内容的提问来源于stack exchange,提问作者davewilliams459

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 07:44:57