【问题标题】:Two different content types on one call一次通话两种不同的内容类型
【发布时间】:2019-10-20 05:53:34
【问题描述】:

我正在向 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);
};

【问题讨论】:

  • 这可能会有所帮助。 stackoverflow.com/questions/5809099/…
  • 它必须是 FormData,并且 JSON 可以是 FormData 的一部分,或者作为标题添加
  • @Slai 我不确定我理解你的意思,你能解释一下吗?
  • 不,不可能,即使添加两个Content-Type header,内容主体也只能是一种类型。但是没有什么可以阻止您将 Grouping groups 作为 json 字符串传递到表单数据中。
  • @AvinKavish 你能举个例子吗?

标签: javascript


【解决方案1】:

不,不可能,即使添加两个 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 字符串,您必须如上所示在您的操作方法中显式执行此操作,或者使用自定义模型绑定器。

【讨论】:

  • 感谢您的回答和解释!
猜你喜欢
  • 2015-06-22
  • 1970-01-01
  • 2011-07-28
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多