注意:在此问题的底部进行编辑
我有一个非常奇怪的问题,我开始在这个问题上拔头发。我正在使用Angular和Laravel 5.4。
我正在使用Barryvdh\Cors并且它工作正常。但是由于某种原因,我只得到一个控制器的以下错误,没有别的!
阻止跨源请求:同源策略禁止读取 远程资源在 http://www.example.com/packing?data_type=prealert&shipment_ref=1。 (原因:在CORS标头中缺少令牌'access-control-allow-headers' 来自CORS预检频道的“Access-Control-Allow-Headers”。
这只发生在packing
。
这是我的路线(为了便于阅读,我省略了许多其他行):
Auth::routes();
Route::get('/', 'HomeController@index');
Route::group([ 'middleware' => 'cors'], function()
{
// works
Route::resource('prealert', 'PrealertController');
// doesnt work
Route::resource('packing', 'PackingController');
// works
Route::resource('shipping', 'ShippingController');
});
我正在比较下面的两个控制器,你可以看到它们是完全相同的(我想??)。
然而,如果我改变
Route::resource('packing', 'PackingController');
到
Route::resource('packing', 'PrealertController');
工作正常。
我假设AngularJS方面没什么,因为我已经能够将它缩小到简单的那条线,即即使代码是相同的,我也只是使用另一个控制器。
这是我的PackingController
(Http / Controllers / PackingController.php)
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\PublishPackingRequest;
use Mockery\CountValidator\Exception;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use DB;
use Auth;
class PackingController extends Controller {
public function index( ) {
die('test');
}
}
我的PrealertController
(Http / Controllers / PrealertController.php)
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\PublishPrealertRequest;
use Mockery\CountValidator\Exception;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Auth;
use DB;
class PrealertController extends Controller {
public function index() {
die('test');
}
}
修改
所以它变得更加奇怪,我将我的PackingController.php复制到一个名为AnotherController.php的文件中,并将我的路线更改为以下内容......
Route::resource('packing', 'AnotherController');
我还将类名更改为AnotherController
即便如此有效!也许我应该尝试删除文件
答案 0 :(得分:0)
看起来您的控制器可能会卡在名称空间自动加载缓存中?我会尝试以下方法解决它,从
开始composer -o dump-autoload
然后执行路由缓存刷新
php artisan route:cache
然后最后使用
检查路线是否确实存在php artisan route:list
我还会检查您是否可以看到CORS中间件正在应用于路由,因为您没有将其用作全局中间件。它应该像下面图片中的中间件部分下的“ oauth,api.company,api.user ”
如果这不能解决问题,那么我会检查控制器的Camel外壳是否处于正确的顺序,匹配来自Actions部分的路径:list
答案 1 :(得分:0)
为了使包工作,请求必须是有效的CORS请求,并且需要包含" Origin"报头中。
发生错误时,中间件不能完全运行。因此,当发生这种情况时,您将无法看到实际结果,但会收到CORS错误。
检查您的操作是否正常运行。
答案 2 :(得分:0)
我遇到了同样的问题,我的所有路径都可以运行,但是只有一条,而且我知道该路径及其控制器自从我用Postman测试后就可以正常工作了。实际发生的事情是我的Angular(5)由于某种原因(我正在发送JSON)自动将请求类型设置为OPTIONS。将其更改为POST为我解决了这个问题,我通过按照应用程序中所有其他POST请求发送FormData来解决了该问题。 始终检查您的网络标签。