如何在Showpad更新资产请求中传递字符串数组类型参数?
Showpad更新资产时字符串数组参数传递问题解决方法
你当前的问题是用StringContent(downloadableInternal.ToString())传递数组参数,这种方式会把数组直接转为默认的字符串表示(比如System.String[]或[original, pdf]),不符合Showpad API对字符串数组的接收格式要求。以下是两种可行的解决方式:
方式一:多值传递(Multipart表单标准数组传递方式)
对于大多数API,传递字符串数组的标准方式是为数组中的每个元素单独添加一个同名的表单项,部分API要求参数名带[]后缀(如downloadableInternal[]),可以根据Showpad文档调整。修改后的代码如下:
var formContent = new MultipartFormDataContent(); // 添加常规字段 formContent.Add(new StringContent(externalId), nameof(externalId)); formContent.Add(new StringContent(name), nameof(name)); formContent.Add(new StringContent(externalDate), nameof(externalDate)); formContent.Add(new StringContent(isDivisionShared.ToString()), nameof(isDivisionShared)); // 处理downloadableInternal数组 if (downloadableInternal != null) { foreach (var item in downloadableInternal) { // 若API要求参数名带[],则改为 $"{nameof(downloadableInternal)}[]" formContent.Add(new StringContent(item), nameof(downloadableInternal)); } } // 空数组场景:若API要求必须传递该字段,可添加一个空值项;否则可省略此块 // else // { // formContent.Add(new StringContent(string.Empty), nameof(downloadableInternal)); // } // 处理downloadableExternal数组 if (downloadableExternal != null) { foreach (var item in downloadableExternal) { formContent.Add(new StringContent(item), nameof(downloadableExternal)); } } // 添加文件内容 formContent.Add(new ByteArrayContent((await fileContent.ReadAsByteArrayAsync())), nameof(file), file); return new ShowpadUpdateAssetRequest() { ExternalFileUri = externalFileUri, externalDate = externalDate, externalId = externalId, file = file, name = name, isDivisionShared = isDivisionShared, downloadableInternal = downloadableInternal, downloadableExternal = downloadableExternal, Url = url, Bearer = bearer, ResponseType = typeof(ShowpadUpdateAssetResponse), Content = formContent };
方式二:JSON序列化传递(若API支持接收JSON格式数组)
如果Showpad API允许以JSON字符串形式接收数组参数,可以直接将数组序列化为JSON字符串后传递:
// 引用System.Text.Json或Newtonsoft.Json var internalJson = System.Text.Json.JsonSerializer.Serialize(downloadableInternal); var externalJson = System.Text.Json.JsonSerializer.Serialize(downloadableExternal); var formContent = new MultipartFormDataContent(); // ...添加其他常规字段... formContent.Add(new StringContent(internalJson, Encoding.UTF8, "application/json"), nameof(downloadableInternal)); formContent.Add(new StringContent(externalJson, Encoding.UTF8, "application/json"), nameof(downloadableExternal)); // ...添加文件内容...
优先尝试方式一,这是Multipart表单传递数组的通用方案;如果方式一无效,再确认Showpad API文档是否要求以JSON格式接收数组参数。
内容的提问来源于stack exchange,提问作者CMartins
相关产品推荐
相关产品推荐

