我有一个用于数据迁移的dotnet核心控制台应用程序。 所有查询都通过graphQL查询/突变进行管理。作为graphQL客户端的处理程序,我使用的是:GraphQL.Client
现在,我面临文件上传问题。从graphql documentation可以理解,它必须通过多部分请求进行管理。我一直在寻找dotnet客户端实现,但没有运气,所有graphql客户端都是通过javascript处理的。
这是我要上传的示例:
var str = @"mutation uploadFile( $entityId: String! $fileInput: FileInput $file: Upload! ) {
uploadFile(entityId: $entityId, fileInput: $fileInput, file: $file) {
id type originalName size mimeType
}
}";
var variables = new
{
entityId = model.EntityId,
fileInput = new {
type = model.Type,
size = model.Size
},
file = "null"
};
var query = new GraphQLRequest
{
Query = str,
Variables = variables,
OperationName = "uploadFile"
};
public async Task PostFileAsync(GraphQLRequest query, byte[] fileBytes)
{
MultipartFormDataContent form = new MultipartFormDataContent();
form.Add(new StringContent(JsonConvert.SerializeObject(query), Encoding.Default, "application/json"), "operations");
form.Add(new StringContent("{\"0\":[\"variables.file\"]}", Encoding.Default, "application/json"), "map");
form.Add(new StringContent(Convert.ToBase64String(fileBytes)), "0", "filename.pdf");
HttpResponseMessage response = await _httpClient.PostAsync(this.Url, form);
}
响应,我得到:400(错误请求)-消息:必须提供查询字符串。
有人遇到这种情况或可以提供一些指导,将非常有帮助。