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

Azure Function集成Swagger参数传递失败,请求始终返回400

地址验证Azure Function请求体为空的排查与解决

常见问题点和解决办法

1. 函数请求绑定配置错误

Azure Function要接收请求体,首先得确保HttpTrigger的请求方法是POST/PUT(GET请求默认不带请求体),同时参数绑定要正确。

  • 错误示例:
    [FunctionName("ValidateAddress")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
        ILogger log)
    
    这里用了GET方法,肯定拿不到请求体。改成POST方法,并且如果用模型接收参数,要添加[FromBody]标记:
  • 正确示例:
    [FunctionName("ValidateAddress")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] [FromBody] RequestData requestData,
        ILogger log)
    

2. RequestData实体类序列化问题

实体类的属性必须是公共的,且要有get/set方法,否则序列化器无法读取数据。

  • 正确的实体类写法:
    public class RequestData
    {
        public string AddressLine1 { get; set; }
        public string City { get; set; }
        public string PostalCode { get; set; }
    }
    
    如果用System.Text.Json序列化,要注意请求JSON的字段大小写(比如常用的camelCase)和实体类的PascalCase匹配,可在Startup中配置序列化规则:
    builder.Services.AddControllers()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
        });
    

3. Swagger测试时Content-Type未配置

Swagger测试时,必须将请求头的Content-Type设置为application/json,否则即便传了JSON格式的请求体,Function也无法识别。同时要检查请求体的JSON格式是否合法(比如引号配对、逗号正确)。

测试用合法JSON示例:

{
  "addressLine1": "123 Main St",
  "city": "Seattle",
  "postalCode": "98101"
}

4. Startup配置遗漏关键项

如果是隔离进程模型的Azure Function,Startup中必须添加控制器服务和Swagger配置:

public class Startup : FunctionsStartup
{
    public override void Configure(IFunctionsHostBuilder builder)
    {
        // 添加控制器服务以支持模型绑定
        builder.Services.AddControllers();
        // Swagger文档配置
        builder.Services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new OpenApiInfo { Title = "地址验证API", Version = "v1" });
        });
    }
}

同时要确认.csproj中启用了隔离进程:

<PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
    <OutputType>Exe</OutputType>
    <IsolateProcess>true</IsolateProcess>
</PropertyGroup>

5. 请求体大小超限

如果请求体体积超过默认限制,会导致无法接收,可在host.json中调整大小:

{
  "extensions": {
    "http": {
      "maxRequestSize": "10MB"
    }
  }
}

快速排查步骤

  1. 绕过Swagger,直接用Postman或curl测试请求,确认问题是否出在Function本身:
    curl -X POST -H "Content-Type: application/json" -d '{"addressLine1":"123 Main St","city":"Seattle","postalCode":"98101"}' https://你的函数地址/api/ValidateAddress
    
  2. 在函数代码中添加日志,查看实际接收的请求信息:
    log.LogInformation("请求Content-Type: " + req.ContentType);
    string body = await new StreamReader(req.Body).ReadToEndAsync();
    log.LogInformation("收到的请求体: " + body);
    
    通过日志可以判断是请求体未传递,还是传递后解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:37:11