将整数列表发送到 REST API 会引发 415(不支持的媒体类型)

Posted

技术标签:

【中文标题】将整数列表发送到 REST API 会引发 415(不支持的媒体类型)【英文标题】:Sending list of integers to REST API throws 415 (Unsupported Media Type) 【发布时间】:2021-05-04 09:15:36 【问题描述】:

我正在尝试使用 reactjs 和 .net core web api,我正在尝试将简单的整数列表发送到其余 api。通过邮递员,我做到了没有任何问题,但是当我尝试从我的 react js 代码中做到这一点时,我在控制台中收到 415 错误:

这是我在 API 上的方法的外观:

   // DELETE api/SiteUsers/delete
   [HttpPost("delete")]
   public async Task<ActionResult> DeleteSiteUsers(DeleteValuesDto deleteValues, CancellationToken cancellationToken)
   
            
        return NoContent();
   

这是我的 DeleteValuesDto 的样子:

在前端我做了一个简单的方法,应该调用 api 来调用 rest api:

 const handleDelete = async () => 
    var deleteValues = 
      values: selectedRows,
    ;
    await deleteSiteUser(deleteValues);
  ;

这是我在前端的deleteSiteUser 方法:

export const deleteSiteUser = (deleteValues) => 
  console.log('deleteValues', deleteValues);
  return axiosWrapper.request(
    url: `/SiteUsers/delete`,
    method: 'POST',
    deleteValues,
  );
;

以下是控制台日志的结果:

我以为这会很简单,但我发现实际上并非如此:/

【问题讨论】:

您是否将其作为表单数据发布? @Marco No.. 我只是将其作为经典的帖子请求发送,而不是将其添加到表单中 我只能想象,这和你的axios请求有关。尝试根据文档将其设置为dataaxiosWrapper.request( url: /SiteUsers/delete, method: 'POST', data: deleteValues, );:github.com/axios/axios#request-config @Marco 那是对的伙伴!我只是红了它!但感谢您的帮助。所以你可以写一个带有一点解释的答案,这样我就可以接受它!感谢您的帮助。 【参考方案1】:

您需要按照文档 (https://github.com/axios/axios#request-config) 发送名为 data 属性中的数据

export const deleteSiteUser = (deleteValues) => 
  console.log('deleteValues', deleteValues);
  return axiosWrapper.request(
    url: '/SiteUsers/delete',
    method: 'POST',
    data: deleteValues,
  );
;

如果您没有设置数据属性,则有效负载为空。最可能的结果是,Conent-Type 标头未设置,因此 Asp.Net 无法决定如何解析请求正文,然后抛出该错误。您可以在 Chrome 的开发者控制台中检查,然后设置 data 属性并检查该请求的 Content-Type 标头。

【讨论】:

【参考方案2】:

您将 ID 包装在具有 values 字段的对象中,但您的端点需要一个普通数组。

不要像使用 deleteValues 那样包装 selectedRows,而是直接传递它。

const handleDelete = async () => 
    await deleteSiteUser(selectedRows);
  ;

【讨论】:

我的端点只需要一个 deleteValues,它是一个对象,而里面是一个数组?所以你推荐的这个改变也需要我修改 API 端点?对吗? 对不起,我误解了这个问题。但是,也许您需要将Values 大写?不过我不确定。 我尝试在前端和其他一些东西上大写“值”,但它不起作用,我不知道为什么:(

以上是关于将整数列表发送到 REST API 会引发 415(不支持的媒体类型)的主要内容,如果未能解决你的问题,请参考以下文章

如何将请求正文中的列表值发送到 Rest Api

在颤动中使用 REST api 将列表数据发送到云 Firestore 时出错

Mandrill 通过 REST API 作为单独的消息发送给多个人

在 rest api 中发布请求时出现 415 错误,尝试运行 cms 查询

api rest 调用更新 django 模型时出现错误 415

将 POST 从 api 转发到另一个时出现错误代码 415