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

NSwag生成TypeScript多表单客户端仅支持Blob问题求助

解决NSwag生成Multipart Form Data客户端仅接受Blob的问题

先查Swagger元数据是否准确

首先确认Swagger文档里这个上传端点的请求体定义有没有问题:

  • 看requestBody的content是不是明确标了multipart/form-data,而且字段结构正确——要是Swagger里把整个请求体直接当成单一Blob类型,NSwag自然会生成只接Blob的方法。

调NSwag的生成配置

在nswag.json配置文件里,针对TypeScript客户端生成做这些修改:

  • 找到codeGenerators.typescriptClient节点,确保generateClientClasses和generateDtoTypes都设为true。
  • 如果是Angular项目,把template设为Angular,重点开启generateFormData选项——这个开关会让NSwag把multipart请求的参数生成为FormData兼容的结构,而不是单一Blob:
    "codeGenerators": {
      "typescriptClient": {
        "template": "Angular",
        "generateClientClasses": true,
        "generateDtoTypes": true,
        "generateFormData": true,
        "formDataKeyValuePairFormat": "Json"
      }
    }
    

后端API的Swagger注解要到位

如果后端是ASP.NET Core,检查API方法的注解:

  • 用[FromForm]标记参数,别用[FromBody],比如:
    [HttpPost("uploadDoc")]
    public IActionResult UploadDoc([FromForm] UploadRequest model)
    {
        // 处理上传逻辑
    }
    
  • 模型里的文件字段要用IFormFile类型,确保Swagger能识别这是multipart的表单字段,而不是二进制流。

手动改生成的客户端代码(临时救急)

要是上面的方法都没解决,直接改生成的TypeScript代码:
把原来接受Blob的方法改成接受表单模型,然后手动组装FormData:

uploadDoc(model: UploadRequest): Observable<void> {
    const formData = new FormData();
    formData.append('content', model.content);
    // 要是有其他表单字段,也一起append进去
    return this.http.post<void>(`${this.baseUrl}/uploadDoc`, formData);
}

同时补充对应的UploadRequest类型,包含文件和其他需要的字段。

内容的提问来源于stack exchange,提问作者gabor.sari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:05:45