开发者问题收集

405 方法不允许 - CodeIgniter Rest-server

2018-09-20
4531

我已经在使用 Codeigniter - Rest Server 遇到麻烦一个星期了。 我有一个名为 Users 的控制器,它有 2 个方法 all_users_get register_post

  1. all_users_get 工作正常。
  2. register_post

    返回 { "status": false, "error": "未知方法" }

如果我将方法 all_users_get 更改为 POST,我会得到相同的错误,只适用于 GET

<?php

use Restserver\Libraries\REST_Controller;
defined('BASEPATH') OR exit('No direct script access allowed');

require APPPATH . 'libraries/REST_Controller.php';
require APPPATH . 'libraries/Format.php';

class Users extends REST_Controller {

function __construct()
{
    // Construct the parent class
    parent::__construct();

    $this->load->model('user_model');

    // Configure limits on our controller methods
    // Ensure you have created the 'limits' table and enabled 'limits' within application/config/rest.php
    $this->methods['users_get']['limit'] = 500; // 500 requests per hour per user/key
    $this->methods['users_post']['limit'] = 100; // 100 requests per hour per user/key
    $this->methods['users_delete']['limit'] = 50; // 50 requests per hour per user/key
}

/**
 * @method: GET
 * Fetch all users
 */

public function all_users_get()
{
    $users = $this->user_model->all_users();
    // Check if the users data store contains users (in case the database result returns NULL)
    if ($users)
    {
        // Set the response and exit
        $this->response($users, REST_Controller::HTTP_OK); // OK (200) being the HTTP response code
    }
    else
    {
        // Set the response and exit
        $this->response([
            'status' => FALSE,
            'message' => 'No users were found'
        ], REST_Controller::HTTP_NOT_FOUND); // NOT_FOUND (404) being the HTTP response code
    }
    $this->response($users, REST_Controller::HTTP_OK);

}

/**
 * User Register
 * *************************
 * 
 * @param: fullname
 * @param: email address
 * @param: password
 * @param: username
 * 
 * *************************
 * @method: POST
 * @link : api/users/register
 */

public function resgister_post()
{

    header('Access-Control-Allow-Origin: *');

    $this->response("Teste", REST_Controller::HTTP_OK);

}

}

我使用 Xampp 在本地主机上运行我的代码,我在 phpinfo 上找到

_SERVER["REQUEST_METHOD"] GET

我很困惑,我不知道这是否与 Xampp 配置或我的代码有关,请帮助。谢谢大家

3个回答

This function should work for you :)

  public function index_post()// post data to the database
  {
    $data = [
        'first_name'        => $this->post('first_name'),
        'last_name'         => $this->post('last_name'),
        'email'             => $this->post('email')

    ];

    if( $this->users->createUser($data) > 0)
    {
        $this->response([
            'status' => true,
            'message' => 'NEW USER CREATED'
        ], REST_Controller::HTTP_CREATED); 
    }
    else{
        $this->response([
            'status' => false,
            'message' => 'FAILED TO CREATE NEW USER'
        ], REST_Controller::HTTP_BAD_REQUEST);
    }

}
Jason Full Stack Developer
2019-12-11
header('Access-Control-Allow-Origin: *');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
    header('Access-Control-Allow-Headers: Content-Type');
    exit;
}

只需在构造函数中复制上面的行即可,它对我有用

mayur prajapat
2020-02-11

终极解决方案 步骤 1 在您的构造函数中,添加以下代码

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
$method = $_SERVER['REQUEST_METHOD'];
if ($method == "OPTIONS") {
    die();
}

步骤 2: 打开您的 route.php 并定义 API 路由 例如

$route['api/v1/auth/login'] = 'api/v1/auth/login';

注意: 该路由将在步骤 3 中使用

步骤 3: 打开您的 config.php,添加以下代码

if (stripos($_SERVER["REQUEST_URI"],'/api/v1/auth/login/') === FALSE) {
    $config['csrf_protection']  = FALSE;
}else{ 
    $config['csrf_protection']  = FALSE; 
}

注意:将 /api/v1/auth/login/ 更改为您的端点

Obot Ernest
2021-01-29