javascript - 一次通话两种不同的内容类型
问题描述
我正在向 api 发布一个具有两个不同参数的对象,每个参数需要一个不同'Content-Type'
的参数,第一个参数groups
应该具有以下内容'Content-Type'
:
'Content-Type': 'application/json',
第二个:
'Content-Type': 'multipart/form-data'
是否可以为同一个帖子设置具有两种不同内容类型的标题?
const { result } = apiPost(`api/emails/attachments?request=${request}&ticketId=${ticketId}`, data, {
headers: { 'Content-Type': 'multipart/form-data' },
});
};
票证对象:
public class ticket
{
[FromBodyAttribute] public Grouping groups { get; set; }
public IEnumerable<IFormFile> files { get; set; }
}
ApiPost:
export const apiFetch: <T>(url: string, options?: object) => Promise<T> = (
url: string,
options: object,
) => adalFetch(authContext, adalConfig.endpoints.api, axios, url, options);
export const apiPost = async <T>(url: string, data: object, headers: object): Promise<T> => {
const options = {
method: 'post',
data,
config: {
headers: headers || {
'Content-Type': 'application/json',
},
},
};
console.log(data);
console.log(options);
return apiFetch(url, options);
};
解决方案
不,这是不可能的,即使添加两个 Content-Type 标头,内容主体也只能是一种类型。但是没有什么能阻止您Grouping groups
在表单数据中作为 json 字符串传递。
const data = new FormData();
data.append('files', /* all your files */)
data.append('groups', JSON.stringify(groupsObject))
apiFetch(url, { method: 'post', data })
public class Ticket
{
public string groups { get; set; } // <-- Try 'Grouping' as well, may work
public IEnumerable<IFormFile> files { get; set; }
}
public IActionResult Action(Ticket ticket) {
var groups = JsonConvert.DeserializeObject<Grouping>(ticket.groups);
}
据我所知,模型绑定不会反序列化表单数据绑定中的 json 字符串,您必须如上所示在您的操作方法中显式地执行此操作,或者使用自定义模型绑定器。
推荐阅读
- pandas - Pandas Dataframe 重命名 Row 中的重复值
- php - 制作标签标签中心
- r - 添加新变量金融数据集 r
- python - 将子网内层的参数重用到该子网外的层
- python - ViewSet、ModelViewSet、APIView的区别
- c# - Visual Studio C# ODBC Sharepoint 连接器只读字段错误
- flutter - 将数据从屏幕传递到抽屉颤动
- sql - 如何在迁移文件中添加新列
- django-rest-framework - 如何使用 drf_yasg 显示排序
- instagram - Instagram 图形 api 获得关注和追随者数量