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

ASP.NET Core 5 MVC:如何在POST请求中捕获查询字符串参数

解决Webhook POST请求查询参数捕获与415媒体类型错误问题

先处理415错误(不支持的媒体类型)

415错误核心原因是请求的Content-Type与后端接口预期的接收格式不匹配,或是请求体序列化/反序列化失败,按以下步骤排查:

  • 检查Postman请求头:确保Content-Type与接口接收格式一致。比如接口用JSON接收请求体,就把Postman的Content-Type设为application/json;若为表单格式则设为application/x-www-form-urlencoded。
  • 验证请求体类配置:确认WebHookEventData类的序列化规则正确,比如Spring中是否添加@JsonProperty映射字段,ASP.NET中是否配置DataContract/DataMember注解,避免因字段不匹配导致反序列化失败。

捕获POST请求的查询参数

POST请求的查询参数和GET一样存储在URL中,直接通过框架注解即可捕获,以下是主流框架的实现示例:

Spring Boot 示例

在原有方法签名基础上,添加@RequestParam注解指定查询参数名(注意参数名包含.时需明确指定value):

@PostMapping("/webhook/callback")
public ResponseEntity<Void> handleWebhook(
    @RequestHeader("X-Signature") String headerSignature,
    @RequestBody(required = false) WebHookEventData eventData, // 验证请求可能无请求体,设为非必填
    @RequestParam("centre.challenge") String challenge // 捕获查询参数
) {
    // 处理Webhook验证逻辑,比如返回challenge值
    return ResponseEntity.ok().build();
}

ASP.NET Core 示例

使用[FromQuery]注解捕获查询参数,同时允许请求体为null(适配验证场景):

[HttpPost("/webhook/callback")]
public IActionResult HandleWebhook(
    [FromHeader(Name = "X-Signature")] string headerSignature,
    [FromBody] WebHookEventData? eventData, // 验证请求可能无请求体,设为可空
    [FromQuery(Name = "centre.challenge")] string challenge
) {
    // 处理Webhook验证逻辑
    return Ok(challenge);
}

关键注意点

Webhook订阅验证时,部分平台发送的POST请求没有请求体,仅携带查询参数和验证头。如果接口强制要求请求体,会触发400或415错误,因此必须将请求体参数设为非必填(Spring的required=false、ASP.NET的可空类型)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:46:11