如何在Angular 7中调用Yii2的RESTAPI
我有一个Angular服务,它进行API调用。这是我的如何在Angular 7中调用Yii2的RESTAPI,angular,yii2,cors,angular7,yii2-api,Angular,Yii2,Cors,Angular7,Yii2 Api,我有一个Angular服务,它进行API调用。这是我的subscribe.service.ts文件 import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http' @Injectable({ providedIn: 'root' }) export class SubscribeService { reado
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);
}
}
<?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);
}
}
被称为API的postrl在yii2中。下面是我的ApiController.php
文件
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);
}
}
<?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);
}
}
当我在控制台中签入“网络”时,下面的几行并没有被添加,这表示CORS并没有使用我在controller中编写的内容实现。
根据我的研发,必须在“”中添加以下行
我已经在谷歌上搜索了解决方案并实现了它们,但在所有情况下我仍然会得到相同的错误
请帮忙!!我已经试了两天了。我找不到合适的解决方案,因此发布在这里。我没有任何使用angular的经验,但是使用javascript,您需要随请求一起提供标题,并且您应该正确配置服务器端请参见和