У меня есть служба Angular, которая выполняет вызов API. Вот мой subscribe.service.ts
файл
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http'
@Injectable({
providedIn: 'root'
})
export class SubscribeService {
readonly postURL = "http://localhost/sampleproject/frontend/web/api/subscribe";
constructor(private http:HttpClient) { }
subscribeSubmit(subscriber){
return this.http.post(this.postURL, subscriber);
}
}
PostURL, который называется API, находится в yii2. Ниже мой ApiController.php
файл
<?php
namespace frontend\controllers;
use Yii;
use yii\web\Controller;
class ApiController extends Controller {
public $enableCsrfValidation = false;
public static function allowedDomains() {
return [
'*',
];
}
public function behaviors() {
return array_merge(parent::behaviors(), [
'corsFilter' => [
'class' => \yii\filters\Cors::className(),
'cors' => [
'Origin' => static::allowedDomains(),
'Access-Control-Request-Method' => ['POST'],
'Access-Control-Allow-Credentials' => true,
'Access-Control-Max-Age' => 3600,
],
],
]);
}
public function beforeAction($action) {
if (\Yii::$app->getUser()->isGuest &&
\Yii::$app->getRequest()->url !== \yii\helpers\Url::to(\Yii::$app->getUser()->loginUrl) && Yii::$app->controller->action->id != 'subscribeforangular') {
\Yii::$app->getResponse()->redirect(Yii::$app->request->BaseUrl . '/../../login');
}
else {
return parent::beforeAction($action);
}
}
public function actionSubscribe(){
print_r($_POST);
}
}
Я пытаюсь отправить данные из angular с помощью http.post в действие "subscribe"
, которое находится в yii2, но я получаю приведенную ниже ошибку
Access to XMLHttpRequest at 'http://localhost/sampleproject/frontend/web/api/subscribe' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Следующие строки не добавляются, когда я проверил «Сеть» в консоли, которая говорит, что CORS не реализован с тем, что я написал в контроллере.
Согласно моим исследованиям и разработкам следующие строки должны быть добавлены в "http://localhost/sampleproject/frontend/web/api/subscribe"
HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://my-site.example.com
Content-Type: application/json; charset=UTF-8
Date: Fri, 24 Feb 2017 09:21:47 GMT
Server: Apache
Content-Length: 27
Connection: keep-alive
Я нашел решение в Google и внедрил его, но все равно получаю одинаковую ошибку во всех случаях.
Пожалуйста, помогите !! Я пытаюсь это с 2 дней. Я не могу найти правильное решение и, следовательно, размещен здесь.