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

.NET Core MVC部署AWS Elastic Beanstalk后第三方回调接口解析异常

问题根因
  • 两个环境的回调请求格式存在差异:Azure环境下第三方回调发送的是application/json格式的纯JSON请求体,而AWS环境下回调为multipart/form-data格式的表单请求,JSON内容被封装在名为json的表单字段中。原有直接读取整个请求体的逻辑在AWS环境下拿到的是包含边界标识的完整multipart报文,无法直接解析为JSON,因此逻辑失效。
修复代码

你可以通过兼容两种请求格式的方式修改代码,同时优化原有同步读请求体可能导致的线程阻塞问题:

[HttpPost]
[Route("CallBack")]
public async Task<string> CallBack()
{
    try
    {
        eSignService eSignService = new eSignService();
        string jsonContent = string.Empty;

        // 同时适配两种请求格式
        if (Request.HasFormContentType)
        {
            // 处理AWS场景的表单请求,读取json字段
            if (Request.Form.TryGetValue("json", out var jsonField))
            {
                jsonContent = jsonField;
            }
        }
        else
        {
            // 处理Azure场景的纯JSON请求
            using var reader = new StreamReader(Request.Body);
            jsonContent = await reader.ReadToEndAsync();
        }

        if (!string.IsNullOrWhiteSpace(jsonContent))
        {
            // 原有业务逻辑,注意需要先反序列化JSON字符串再使用
            // 示例:dynamic jsonObj = JsonSerializer.Deserialize<dynamic>(jsonContent);
        }
        else
        {
            _logger.LogInformation("No Data Found");
        }
    }
    catch (Exception ex)
    {
        _logger.LogInformation("Error : " + ex);
    }
    return "Hello API Event Received";
}
注意事项
  • 若回调请求体积较大,需要确认AWS Elastic Beanstalk的反向代理(Nginx/IIS)是否放开了表单请求大小限制,避免请求被代理层拦截。
  • 原有代码中使用.GetAwaiter().GetResult()同步读取异步方法返回值,容易引发线程死锁,建议统一使用异步await操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:06:04