Angular 7.2 HttpClient删除方法无效,请改为发送Options方法

时间:2019-04-24 23:14:38

标签: angular laravel-5 httpclient

我正在与Angular 7.2组件中的Laravel API进行交互,除delete之外,所有方法都可以正常工作,我可以通过Firefox网络活动控制台看到,当触发该功能时,请求是使用OPTIONS方法发送的。

这是我的服务方式:

elimina( id:number ) {
return this._http.delete( this.apiFMX + '/users/' + id );}

在我的组件中:

eliminaElemento( id:number ) {
this.dataService.elimina( id ).subscribe();
this.ruta.navigateByUrl( '/fmx-listado' );}

但是它不起作用,这是控制台输出:

enter image description here

我在Laravel API中添加了Cors中间件。另外,如果在firefox控制台中编辑了请求,将OPTIONS更新为DELETE方法,则该请求有效。

有什么建议吗?

感谢劝告。

以下是firefox控制台的两个图像:

Network activity

如您所见,它仍然是OPTIONS方法(由浏览器发送),但是如果我编辑请求并将其重新发送为更新为DELETE方法,它将起作用!

Warnings

此警告在触发事件时显示,我重复一次,仅在DELETE方法下发生,PUT和GET正常工作。

这是我的中间件:

  public function handle($request, Closure $next)
{
    return $next( $request )->header( 'Access-Control-Allow-Origin' , '*' )
      ->header( 'Access-Control-Allow-Methods' , 'POST, GET, OPTIONS, PUT, DELETE' )
      ->header( 'Access-Control-Allow-Headers' , '*' );
}

谢谢。

1 个答案:

答案 0 :(得分:0)

这是Http规范,与Angular无关


解决方案(选择一项)

  1. 将您的域添加到响应标题中的Access-Control-Allow-Origin

enter image description here

// your domain : 192.168.30.104 
Access-Control-Allow-Origin: http://192.168.30.104
  1. 相同域上的Angular应用和API

问题原因

CORS中的请求已被拒绝

  

在CORS中,使用OPTIONS方法发送了预检请求,因此   服务器可以响应是否可以发送请求   这些参数。

特别是,如果满足以下任一条件,则对请求进行预检:

如果请求使用以下任何一种方法:

  • 放置
  • 删除
  • 连接
  • 选项
  • 跟踪
  • PATCH

https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS#Preflighted_requests_in_CORS