405 方法不允许 - CodeIgniter Rest-server
2018-09-20
4531
我已经在使用 Codeigniter - Rest Server 遇到麻烦一个星期了。 我有一个名为 Users 的控制器,它有 2 个方法 all_users_get 和 register_post 。
- all_users_get 工作正常。
-
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