首页 > 解决方案 > Angular 6 Laravel 5.6 在服务调用中使用 httpOptions 时显示 405 个方法

问题描述

我的目的是在 Angular 中生成一个对象(实际上是对象中的对象)并使用服务发送相同的对象,以便 Laravel API 可以获取数据并处理相同的数据(插入由 Angular 发送的数据)。我已经成功地在对象中生成了对象。查看控制台日志如下:

{"request":{"data":"DeTurgVx6Oyh0is0TZMJncHHJh6JBevZbgW1XL2s1uvXk7qKKMRlJ6FJ1AYAiNSxHlA0JLO9pyQgYFBWQHnliOPVHsaFtsVZ8emmsSS7MOfKBP6x2CZqCMWegRMdoaV9TJxKSEsKhD48frwiOwwD4GKChYiX0HfZKp5Wm6aQCOSuXC7HyXb+KZjbhWsmispUhz21FBf0T6NWaPmOgf/eWtMgCu2hPYj7IyrGLEmt8QwmCn79VTDmNnAeM7zecXqg/TPu1wqoYrBXq8IHUQ9+CA==","salt":"YWRnaHJ0eXVwb2Vxd2VkZg=="}}

现在,我想通过服务发送数据,以便 Laravel 可以接受它。为了做同样的事情,我做了以下事情。在这种情况下,数据是使用 post 方法提交的,但是数据没有插入数据库,因为我认为我没有Content-Type': 'application/json将服务作为选项传递。

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { environment } from '../environments/environment';
import { User } from '../app/shared/models/user.model'; 
export class RegistrationService {
private rootUrl = environment.api;
private httpOptions: any;
constructor(private http: HttpClient) {
    this.httpOptions = {
        headers: new HttpHeaders({ 'Content-Type': 'application/json'})
    };
}
registerUser(form){
  var formValues = JSON.stringify(form);
  return this.http.post(this.rootUrl+'register', formValues);
}

因此,为了纠正上述问题,我this.httpOptions在服务中附加了 api 调用,如下所示,但它显示了我405 method not allowed

return this.http.post(this.rootUrl+'register', formValues, this.httpOptions);

为了克服这个问题,我附上了下面的代码是 Laravelindex.php但是,这并不能解决问题。

header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Request-With');
header('Access-Control-Allow-Credentials: true');
$app->run();

有人可以告诉我如何解决这个问题吗?

这是Laravel中的路线: web.php

$router->get('/', function () use ($router) {
    return $router->app->version();
});
$router->group([
    'prefix' => 'api',
    'middleware' => ['XSS'],
    ], 
function () use ($router) {
  $router->post('register', ['uses' => 'UserController@register']);
});

下面是显示 405 方法时调用的 API:

请求 URL:http://localhost/projectName/api/register 请求方法:OPTIONS 状态代码:405 Method Not Allowed 远程地址:[::1]:80 Referrer Policy:no-referrer-when-downgrade

这是响应标头:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Request-With
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Origin: *
Allow: POST
Cache-Control: no-cache, private
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8
Date: Tue, 08 Jan 2019 05:16:44 GMT
Keep-Alive: timeout=5, max=100
Server: Apache/2.4.18 (Ubuntu)
Transfer-Encoding: chunked

标签: angularlaravelangular6

解决方案


推荐阅读