Odoo自定义POST端点报Method Not Allowed错误求助
Odoo POST端点调用出现"Method Not Allowed"错误排查与修复
调用自定义的Odoo CRM线索创建端点时,收到如下错误:
Method Not Allowed
The method is not allowed for the requested URL.
用户的自定义控制器代码如下:
from odoo import http from odoo.http import request from odoo.exceptions import ValidationError class ApiController(http.Controller): @http.route('/api/create_crm_lead', type='json', auth='none', methods=['POST']) def create_crm_lead(self, **kwargs): # 从请求中提取JSON数据 data = request.json # 验证必填字段 required_fields = ['name', 'contact_name'] # 根据需求调整 missing_fields = [field for field in required_fields if field not in data] if missing_fields: return {'error': f'缺少必填字段: {", ".join(missing_fields)}'} try: # 创建新的CRM线索 new_lead = request.env['crm.lead'].sudo().create({ 'name': data.get('name'), 'contact_name': data.get('contact_name'), # 根据需要添加更多字段 }) return {'success': True, 'id': new_lead.id} except ValidationError as e: return {'error': e.name}
可能的原因及修复方案
请求方法/Content-Type不匹配
确保请求使用POST方法,且请求头Content-Type设置为application/json。因为路由type='json'要求请求体必须是JSON格式,否则Odoo会直接拒绝请求。CSRF验证拦截
即使设置了auth='none',部分场景下Odoo仍会触发CSRF检查。在路由装饰器中添加csrf=False参数即可解决:@http.route('/api/create_crm_lead', type='json', auth='none', methods=['POST'], csrf=False)路由冲突
检查是否有其他模块定义了相同的/api/create_crm_lead路由,导致当前路由被覆盖。可以修改路由路径为唯一值,比如/api/custom/create_crm_lead。模块未更新/安装
确保自定义控制器所在的模块已经安装,且修改代码后执行了更新模块操作(Odoo需要重新加载路由配置才能生效)。
测试建议
用curl命令测试修复后的端点:
curl -X POST -H "Content-Type: application/json" -d '{"name":"测试线索","contact_name":"测试联系人"}' http://你的Odoo地址/api/create_crm_lead
内容的提问来源于stack exchange,提问作者EADPDEV
相关产品推荐
相关产品推荐

