You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular调用Flask POST API出现405不允许错误求助

解决Angular调用Flask POST API出现405 Not Allowed的问题

你遇到的405错误主要来自两个常见的核心问题:URL路径不匹配和跨域资源共享(CORS)未配置,咱们一步步来排查解决:

1. 修正URL路径匹配问题

你Angular代码里的请求URL是:

this.httpClient.post('http://127.0.0.1:5000/controllers/update/', ...)

注意末尾多了一个斜杠/,而Flask里注册的路由是:

api.add_resource(CtrlUpdate, '/controllers/update')

Flask-RESTful的路由默认是严格匹配规则,这两个路径会被视为完全不同的地址。当你请求带斜杠的URL时,Flask会返回301重定向到不带斜杠的版本,但POST请求经过重定向后会自动转为GET请求,而你的CtrlUpdate类只实现了post方法,自然就会返回405 Not Allowed。

解决办法:
要么统一Angular的请求URL,去掉末尾斜杠:

this.httpClient.post('http://127.0.0.1:5000/controllers/update', ...)

要么在Flask中同时注册带斜杠和不带斜杠的路由,兼容两种请求:

api.add_resource(CtrlUpdate, '/controllers/update/', '/controllers/update')

2. 配置CORS解决跨域问题

Angular通常运行在http://localhost:4200,而Flask服务在http://127.0.0.1:5000,属于不同的源,浏览器会默认拦截跨域请求,这也可能表现为405错误或者请求被直接阻断。

解决步骤:

  • 先安装Flask-CORS扩展:
pip install flask-cors
  • 在你的Flask代码中全局启用CORS:
from flask import Flask, jsonify
from flask_restful import Api, Resource
from flask_cors import CORS

app = Flask(__name__)
CORS(app)  # 允许所有源的跨域请求,生产环境可限制特定域名
api = Api(app)

class CtrlUpdate(Resource):
    """Update."""
    def post(self):
        """Controller update."""
        # 后续可添加获取请求数据的逻辑
        return jsonify({'status': True})

api.add_resource(CtrlUpdate, '/controllers/update')

if __name__ == '__main__':
    app.run(debug=True)

3. 可选:确保Flask正确接收POST数据

当上面两个问题解决后,你可能需要在Flask的post方法里正确获取Angular发送的JSON数据,记得导入request对象:

from flask import request

# 在CtrlUpdate的post方法中:
def post(self):
    data = request.get_json()
    if not data:
        return jsonify({'status': False, 'message': '未接收到有效数据'}), 400
    # 提取需要的参数
    ctrl_id = data.get('ctrl_id')
    port = data.get('port')
    # 编写你的更新逻辑
    return jsonify({'status': True})

按照上面的步骤调整后,应该就能正常调用POST API了。

内容的提问来源于stack exchange,提问作者rajvi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:54:15