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();
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的主要内容,如果未能解决你的问题,请参考以下文章
Youtube API未捕获(在承诺中)错误:请求失败,状态码为403