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

React提交FormData时C#后端HttpContext.Current.Request.Params始终为空

问题解决方法

前端问题修复

你手动设置了Content-Type: multipart/form-data,但fetch在发送FormData时会自动生成包含boundary的正确Content-Type,手动设置会缺失boundary参数,导致后端无法解析表单数据。

修改后的前端代码:

export async function uploadFile(file, type) {
  const formData = new FormData();
  formData.append("file", file);
  formData.append("fileType", type);
  console.log(...formData);

  try {
    const url = `${auth.getApi()}/FileUpload`;
    const resp = await fetch(url, {
      method: "POST",
      body: formData,
      headers: new Headers({
        Authorization: auth.BasicAuth()
        // 移除手动设置的Content-Type
      }),
    });
    return resp;
  } catch (e) {
    console.log(e);
    return e;
  }
}

后端代码优化

ASP.NET Web API中,直接用HttpContext.Current.Request.Params获取multipart表单数据并不靠谱,应该通过Request.Content.ReadAsMultipartAsync()来解析:

修改后的后端代码片段:

[BasicAuthenticationFilter(true)]
[HttpPost]
public async Task<IHttpActionResult> Post()
{
    try
    {
        if (!Request.Content.IsMimeMultipartContent())
        {
            return BadRequest("请求不是multipart类型");
        }

        var provider = new MultipartMemoryStreamProvider();
        await Request.Content.ReadAsMultipartAsync(provider);

        // 获取fileType参数
        string fileType = provider.FormData.GetValues("fileType")?.FirstOrDefault();
        if (string.IsNullOrEmpty(fileType))
        {
            return BadRequest("缺少fileType参数");
        }

        // 获取上传的文件
        var fileContent = provider.Contents.FirstOrDefault(c => c.Headers.ContentDisposition.Name.Equals("file"));
        if (fileContent == null)
        {
            return BadRequest("缺少file参数");
        }
        var fileStream = await fileContent.ReadAsStreamAsync();
        // 后续文件处理逻辑...

        return Ok("上传成功");
    }
    catch (Exception ex)
    {
        logger.Error(ex.Message);
        return InternalServerError(ex);
    }
}

为什么Postman能正常工作?

Postman会自动为multipart请求添加正确的boundary参数,后端可以正常解析;而你手动设置Content-Type时没有包含这个关键参数,导致解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:05:27