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

Codeigniter RESTful API在Postman调用时报错:Invalid Request

问题排查与解决:CodeIgniter REST API 全局返回"Invalid Request"错误

可能的原因及对应解决办法

1. 路由配置未正确映射data_model前缀

CodeIgniter的REST路由需要明确配置前缀与控制器的关联,否则请求无法正确路由到对应的控制器。

  • 检查application/config/routes.php,确认是否添加了data_model的路由规则:
    // 若data_model下的请求对应根目录下的控制器
    $route['data_model/(:any)'] = '$1';
    // 若Users控制器对应data_model/users路径
    $route['data_model/users/(:any)'] = 'users/$1';
    
    若使用REST_Controller的路由功能,也可在控制器构造函数中配置:
    class Users extends REST_Controller {
        public function __construct() {
            parent::__construct();
            $this->config->set_item('rest_format', 'json');
        }
    }
    

2. 请求方式不匹配

REST_Controller默认严格校验请求方法,比如login接口通常需要POST请求,使用GET访问会直接返回无效请求。

  • 验证请求方法:在Postman中确保请求方法为POST(匹配login业务逻辑);其他接口需确认控制器方法命名符合REST规范(如get_xxx对应GET请求,post_xxx对应POST请求)。
  • 若需允许多种请求方法,可在控制器构造函数中设置:
    public function __construct() {
        parent::__construct();
        $this->methods['login']['methods'] = ['POST', 'GET']; // 允许POST和GET访问login
    }
    

3. REST_Controller全局验证未通过

错误码100100大概率是自定义的全局校验失败标识,可能是控制器构造函数中存在前置校验逻辑(如API密钥、请求头检查)。

  • 检查控制器构造函数:确认是否存在类似全局校验代码:
    public function __construct() {
        parent::__construct();
        // 示例:检查请求头中的API密钥
        $api_key = $this->input->get_request_header('API-Key');
        if (!$api_key || $api_key != 'your_valid_key') {
            return_data(false, 'Invalid Request', [], '100100');
            exit;
        }
    }
    
    若存在此类校验,需在请求中携带正确的验证信息(如Postman Headers中添加API-Key字段),或暂时注释校验代码测试。

4. .htaccess配置导致URL重写失败

若启用了URL重写(去掉index.php),.htaccess配置错误会导致请求无法正确解析。

  • 检查项目根目录的.htaccess文件,确保配置正确:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
    
    同时确认application/config/config.php中:
    $config['index_page'] = '';
    $config['uri_protocol'] = 'REQUEST_URI';
    

5. 控制器未正确继承REST_Controller

若控制器类未正确继承REST_Controller,会导致REST功能失效,触发默认错误返回。

  • 确认控制器类定义:
    class Users extends REST_Controller {
        // ... 你的方法实现
    }
    
    同时确保REST_Controller和Format库已正确放置在application/libraries目录下。

额外代码优化建议

你提供的login方法存在逻辑错误:

// 原代码中两个判断条件均为$user['status'] == 1,第二个分支永远无法触发
if ($user['status'] == 1)
    return_data(false, 'Your Account Disabled', json_decode("{}"));
else if ($user['status'] == 1)
    return_data(false, 'Account Deleted', json_decode("{}"));

建议修正为:

if ($user['status'] == 1) {
    return_data(false, 'Your Account Disabled', (object)[]);
} else if ($user['status'] == 2) { // 假设账号删除对应的status值为2
    return_data(false, 'Account Deleted', (object)[]);
} else {
    return_data(true, 'User authentication successful.', $user);
}

另外,json_decode("{}")可直接替换为(object)[]或[],更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:55:29