【问题标题】:Sending list of integers to REST API throws 415 (Unsupported Media Type)将整数列表发送到 REST API 会引发 415(不支持的媒体类型)
【发布时间】: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 那是对的伙伴!我只是红了它!但感谢您的帮助。所以你可以写一个带有一点解释的答案,这样我就可以接受它!感谢您的帮助。

标签: javascript c# reactjs asp.net-web-api .net-core


【解决方案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 大写?不过我不确定。
    • 我尝试在前端和其他一些东西上大写“值”,但它不起作用,我不知道为什么:(
    猜你喜欢
    • 2015-06-02
    • 2017-09-14
    • 2015-10-25
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多