405 - 未捕获(承诺中)错误:请求失败,状态码为 405

Posted

技术标签:

【中文标题】405 - 未捕获(承诺中)错误:请求失败,状态码为 405【英文标题】:405 - Uncaught (in promise) Error: Request failed with status code 405 【发布时间】:2021-12-24 18:14:13 【问题描述】:

当我尝试从我的数据库中删除时遇到此错误:

删除 https://localhost:44366/api/products/405

未捕获(承诺中)错误:请求失败,状态码为 405

我可以使用 Postman 删除。我的 Get 和 Put 工作

我用:

Azure 数据库

反应

ASP.NET Core API

MSSQL

反应: DbProvider.js:

   deleteProduct: async (id) => 
          let response = await axios.delete(this.state.baseApi + `/products/` + id)
          return response.data;
        

更新 EditorProducts.js:

      import React,  useContext, useState, useEffect, useCallback  from "react";
import  Link  from "react-router-dom";

//confirm box
import confirm from "reactstrap-confirm";

// Icons
import  FaTrash  from "react-icons/fa";
import  FaEdit  from "react-icons/fa";
// Context
import DbContext from "../../../context/DbContext";

const EditorProducts = () => 
  const [products, setProducts] = useState();
  const [refresh, setRefresh] = useState(false);
  const context = useContext(DbContext);

  useEffect(() => 
    context.getProducts().then((x) => setProducts(x));
  , [refresh]);

  const handleDelete = useCallback(async (event) => 
    event.persist();

    await confirm().then((response) => 
      console.log(event.target.id);
      console.log(response);

      if (response) 
    
        context.deleteProduct(event.target.id).then(() => setRefresh(true));
      
    );
  );

  return (
    <>
      <table className="table">
        <thead>
          <tr>
            <th scope="col">#</th>
            <th scope="col">Title</th>
            <th scope="col">Image</th>
            <th scope="col">Actions</th>
          </tr>
        </thead>
        <tbody>
          products != null ? 
            products.map(product => (
              <tr key=product.id>
                  <th scope="row">product.id</th>
                  <td>product.title</td>
                  <td>product.image</td>
                  <td>
                    /* EDIT PRODUCT */
                    <Link to=`/editor/product/$product.id`>
                      <FaEdit style=iconStyle />
                    </Link>
                    /* DELETE PRODUCT */
                    <a to="#" id=product.id onClick=handleDelete>
                      <FaTrash style=iconStyle />
                    </a>
                  </td>
                </tr>
              ))
            : "Loading"
        </tbody>
      </table>
    </>
  );
;

const iconStyle = 
  boxSizing: "unset",
  padding: "5px",
  PointerEvents: "none",
;

export default EditorProducts;

ProductsController.cs

   // DELETE: api/Products/5
        [HttpDelete("id")]
        public async Task<ActionResult<Product>> DeleteProduct(int id)
        
            var product = await _context.Products.FindAsync(id);
            if (product == null)
            
                return NotFound();
            

            _context.Products.Remove(product);
            await _context.SaveChangesAsync();

            return product;
        

        private bool ProductExists(int id)
        
            return _context.Products.Any(e => e.Id == id);
        

【问题讨论】:

您的路线没有 DELETE 处理程序。 【参考方案1】:

只需将路线更改为此并删除退货产品,因为它已经被删除了

[Route("id")]
public async Task<ActionResult> DeleteProduct(int id)
  var product = await _context.Products.FindAsync(id);
            if (product == null)
            
                return NotFound();
            

            _context.Products.Remove(product);
           var result = await _context.SaveChangesAsync();

           if (result ==0) return BadRequest();
           return Ok();
        

javascript

 let response = await axios.delete(this.state.baseApi + `/products/deleteproduct/` + id)

【讨论】:

您好,先生!谢谢你的时间。现在我收到错误:400 DELETE localhost:44366/api/products/deleteproduct 400 @nemt 我更新了我的答案。您不应该使用退货产品,因为它已被删除。 仍然无法正常工作:/ @nemt 请显示您现在遇到的错误 这是我得到的:imgur.com/a/edxywkZ【参考方案2】:

这个问题似乎与this 重复。 这是Raphael Rafatpanah接受的答案

HTTP 405错误表示服务器不允许客户端发送的HTTP请求方法。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405 您在共享的代码示例中使用的 HTTP 方法是 POST。 因此,您的服务器似乎不接受 POST 请求。

要解决此问题,请将请求方法更改为受支持的方法,或更改服务器以允许 POST 请求。

【讨论】:

以上是关于405 - 未捕获(承诺中)错误:请求失败,状态码为 405的主要内容,如果未能解决你的问题,请参考以下文章

未捕获(承诺)错误:请求失败,状态码为404

未捕获(承诺)错误:请求失败,状态码为500

Youtube API未捕获(在承诺中)错误:请求失败,状态码为403

Axios GET请求在我的本地版本上运行,但在Heroku上失败-未捕获(承诺)错误:请求失败,状态码为500

可能未处理的承诺拒绝/错误:请求失败,状态码为 400

请求失败,状态码 400