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

使用C#调用Flink RestApi上传Jar报400 Bad Request问题求助

问题描述

调用Flink RestAPI的/jars/upload端点上传Jar文件时,持续收到400错误,错误信息:

org.apache.flink.runtime.rest.handler.RestHandlerException: Request did not match expected format EmptyRequestBody.

已确认Postman和Python调用该端点正常,但使用C#的HttpClient编写的代码始终报错,代码如下:

var stream = File.OpenRead(jarPath);

var flinkClient = new HttpClient()
{
    BaseAddress = new Uri("xxxx"),
    Timeout = TimeSpan.FromSeconds(3000)
};

var content = new MultipartFormDataContent()
{
    { new StreamContent(stream), "jarfile", "test-0.0.2-SNAPSHOT.jar"},
};

content.Headers.ContentType = new MediaTypeHeaderValue("application/x-java-archive");
var response = await flinkClient.PostAsync("jars/upload", content);
var resultContent = await response.Content.ReadAsStringAsync();

问题原因

错误地将整个MultipartFormDataContent的ContentType设置为application/x-java-archive,而Flink的/jars/upload端点要求:

  • 请求整体为多部分表单格式(ContentType应为multipart/form-data,HttpClient会自动生成带boundary的头部)
  • 仅Jar文件对应的表单部分需要设置application/x-java-archive的ContentType

你的代码覆盖了MultipartFormDataContent的默认ContentType,导致Flink无法识别多部分表单结构,进而判定请求体为空。

修正后的代码

var stream = File.OpenRead(jarPath);

var flinkClient = new HttpClient()
{
    BaseAddress = new Uri("xxxx"),
    Timeout = TimeSpan.FromSeconds(3000)
};

// 创建多部分表单内容,HttpClient会自动设置正确的multipart/form-data头部(含boundary)
var content = new MultipartFormDataContent();

// 为Jar文件单独设置ContentType
var jarContent = new StreamContent(stream);
jarContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-java-archive");

// 将Jar内容添加到多部分表单,参数名"jarfile"需与Flink端点要求一致
content.Add(jarContent, "jarfile", "test-0.0.2-SNAPSHOT.jar");

var response = await flinkClient.PostAsync("jars/upload", content);
var resultContent = await response.Content.ReadAsStringAsync();

关键说明

  1. 不要修改MultipartFormDataContent的ContentType,HttpClient会自动处理multipart/form-data及对应的boundary参数
  2. 仅给Jar对应的StreamContent设置application/x-java-archive的ContentType
  3. 确保表单参数名是jarfile,这是Flink /jars/upload端点要求的固定字段名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 05:16:22