axios请求无法访问后端相关方法

问题描述 投票:0回答:1

我在使用 Axios 请求访问后端方法时遇到问题。 不幸的是,我必须在后端和前端使用其他人预先制作的代码,并且我可以更改或重新编写的数量是有限的。

前端:

  const response = await axiosConfig.put<IReserved>(
    `my_url/${id}`,
    null,
    {
      params: {
        ...body,
      },
    }
  );

我检查了控制台日志,Id 和 Body 似乎都有正确的值。 据我了解,问题在于将它们传递到后端。

后端:

    [HttpPut("{id}"), Authorize]
    public async Task<ActionResult<BasicInfoResponse>> UpdateItem(int id, [FromQuery] Request request)

我连debug都调试不了,代码根本就没有进入这个方法。

提交的最终 URL(来自日志)如下所示:

https://localhost:7216/api/Items/592087867?Var1=900&Var2=592087867&Var3=&Var4=1&Var5=&Var6=&Var7=0882578014

此处的 Id 显示为 Var2。

问题可能是,后端想要 Id 和其他参数分开,并且 Id 优先,而这里的一切都“一团糟”? 另外,有些变量没有值,实际上我没有上传任何变量,因为它们应该是非强制性的,但也许这会导致问题?

到目前为止我尝试过的:

  1. 更改前端请求的结构,例如将“Id”添加到“params”或外部:
      const response = await axiosConfig.put<IReserved>(
        `my_url/${id}`,
        null,
        {
          params: {
            id,
            ...body,
          },
        }
      );
      const response = await axiosConfig.put<IReserved>(
        `my_url/${id}`,
        id,
        {
          params: {
            ...body,
          },
        }
      );
  1. 从后端的 HttpPut("{id}") 或函数参数中删除“Id”。

     [HttpPut, Authorize]
     public async Task<ActionResult<BasicInfoResponse>> UpdateItem(int id, [FromQuery] Request request)
    
    
     [HttpPut("{id}"), Authorize]
     public async Task<ActionResult<BasicInfoResponse>> UpdateItem([FromQuery] Request request)
    
  2. 仅发送不带 Id 的所有参数,因为它已经出现在 url 中,或/并将其添加为参数之一。

      const response = await axiosConfig.put<IReserved>(
        `my_url`,
        null
        {
          params: {
            ...body,
          },
        }
      );
  1. 尝试仅提交 Id,而不提交所有其他内容,它确实访问了该方法,因此错误不是由于函数名称输入错误或其他原因造成的。

在所有情况下,我都会获得状态 400 或状态 405。

请帮忙,

叶夫根尼

c# typescript axios put
1个回答
0
投票

在所有情况下,我都会获得状态 400 或状态 405。

我连debug都调试不了,代码根本就没有进入这个方法。

文档中所述

[ApiController]
属性使模型验证错误自动触发HTTP 400响应。

您可以尝试注释该属性或按照此处的指南禁用自动400响应,检查ModelState以查看您出错的地方

对于您的 405 错误,似乎它与附加了不同 Http 属性的另一个端点匹配,请显示您的整个控制器,以便我们可以尝试重现您的问题

© www.soinside.com 2019 - 2024. All rights reserved.