Cors中间件在使用Header()时导致响应错误



我使用Laravel 5.6和这个中间件允许Ionic应用程序调用我的API的

<?php
namespace AppHttpMiddleware;
use Closure;
class Cors
{
public function handle($request, Closure $next)
{
return $next($request)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS')
->header('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Requested-With, X-XSRF-TOKEN');
}
}

所以这导致了两个请求的错误,我正在强制下载文件。

Call to undefined method SymfonyComponentHttpFoundationBinaryFileResponse::header()

我的请求1

return Excel::download(new AppExportsFleetExport($fleetId), 'debts.xlsx');

我的请求2

return Response::download($file_path,
$file_name,
array('Content-Type: application/octet-stream','Content-Length: '. filesize($file_path))
)->deleteFileAfterSend(true);

禁用这个中间件可以使我的请求正常工作。

我做错什么了吗?

您可以尝试调整中间件,直接在响应的头包上设置头:

$response = $next($request);
$response->headers->add([
'Access-Control-Allow-Origin' => '*',
...
]);
return $response;

所有通过的响应都应该从基本Symfony响应扩展,该响应具有作为HeaderBag的公共$headers属性。因此,这应该适用于所有的回应。

最新更新