使用HotChocolate GraphQL与Banana Cake Pop上传文件遇服务器错误求助
HotChocolate 文件上传404错误排查
问题背景
我正在使用HotChocolate NuGet包结合Banana Cake Pop实现GraphQL,已通过UploadType配置文件上传功能,配置代码如下:
builder.Services .AddGraphQLServer() .AddQueryType<Query>() .AddMutationType<Mutation>() .AddType<UploadType>() .AddTypeExtension<AuthorExtensions>() .AddMutationConventions();
在Banana Cake Pop中提交如下突变请求:
mutation ($input:UploadProfilePictureInput!){ uploadProfilePicture(input: $input){ author{ id } } }
变量:
{ "input": {"file": "ts.json", "authorId": 1} }
得到响应:
{ "message": "", "name": "ServerError", "statusCode": 404, "statusText": "", "bodyText": "" }
切换到Postman以表单数据形式提交,仍报相同404错误,但其他非文件上传的查询在Postman中可正常返回结果。
排查方向
启用Multipart请求支持
HotChocolate处理文件上传需要显式开启multipart请求支持,修改配置代码添加对应项:builder.Services .AddGraphQLServer() .AddQueryType<Query>() .AddMutationType<Mutation>() .AddType<UploadType>() .AddTypeExtension<AuthorExtensions>() .AddMutationConventions() .AddMultipartRequestSupport(); // 新增该行校验输入类型定义
确认UploadProfilePictureInput中file字段的类型为Upload而非字符串:public class UploadProfilePictureInput { public Upload File { get; set; } public int AuthorId { get; set; } }同时确保突变方法参数正确接收该输入类型:
public async Task<UploadProfilePicturePayload> UploadProfilePicture(UploadProfilePictureInput input, [Service] IAuthorRepository repository) { // 文件处理逻辑 }Banana Cake Pop提交方式修正
在Banana Cake Pop中,不能直接在变量里填写文件名,需点击变量面板file字段对应的文件选择按钮,选择本地ts.json文件,而非手动输入字符串"ts.json"。Postman表单数据格式规范
Postman提交需遵循GraphQL multipart请求规范:operations字段值为JSON格式的查询与变量:{ "query": "mutation ($input:UploadProfilePictureInput!){ uploadProfilePicture(input: $input){ author{ id } } }", "variables": {"input": {"file": null, "authorId": 1}} }map字段值为JSON,指定文件对应变量路径:{ "0": ["variables.input.file"] }- 添加文件字段,键为
0,选择本地ts.json文件。
路由匹配检查
确认GraphQL默认路由/graphql未被其他中间件拦截,或是否在配置时修改了路由路径,确保请求URL与服务配置路由一致。
内容的提问来源于stack exchange,提问作者jone selas
相关产品推荐
相关产品推荐

