我正在制作简单的待办事项应用程序,后端是Symfony 4,前端是Vue.js。
由于其他一些端点正常工作,由于未知原因,我收到405
错误状态。
这是我的listController
的一部分:
/**
* @return \FOS\RestBundle\View\View
*/
public function getListsAction()
{
$data = $this->taskListRepository->findAll();
return $this->view($data, Response::HTTP_OK);
}
/**
* @Rest\RequestParam(name="title", description="Title of the list", nullable=false)
* @param ParamFetcher $paramFetcher
* @return \FOS\RestBundle\View\View
*/
public function postListsAction(ParamFetcher $paramFetcher)
{
$title = $paramFetcher->get('title');
if ($title) {
$list = new TaskList();
$preferences = new Preference();
$preferences->setList($list);
$list->setPreferences($preferences);
$list->setTitle($title);
$this->entityManager->persist($list);
$this->entityManager->flush();
return $this->view($list, Response::HTTP_CREATED);
}
return $this->view(['title' => 'This cannot be null'], Response::HTTP_BAD_REQUEST);
}
get操作在这里正常工作,它使我可以从数据库获取所有列表
和nelmio_cors.yaml
文件:
nelmio_cors:
defaults:
origin_regex: true
allow_credentials: true
allow_origin: ['%env(CORS_ALLOW_ORIGIN)%']
allow_methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS']
allow_headers: ['Content-Type', 'Authorization', 'origin', 'Accept', 'bearer', 'Allow']
expose_headers: ['Link']
max_age: 3600
paths:
'^/': ~
如您所见,允许使用POST方法。
如图所示,该方法出现在预期的方法和端点,注册和login_check下,其中未指定使用POST正常工作的方法
网络错误:
在控制台中,我收到CORS错误。
答案 0 :(得分:1)
您正在发出OPTIONS
请求(这是CORS的飞行前请求):
但是我们的服务器清楚地告诉您,它仅接受GET
或POST
请求:
您需要更改您的网络服务器配置(Apache,Nginx,无论使用什么),以便它也接受OPTIONS
请求。
Pre-flight requests在某些情况下由浏览器自动发出,这说明了为什么某些端点正常工作,而不是这个端点正常工作。
您似乎正在使用内置的PHP Web服务器,但功能有限。我不知道有任何更改其配置的方法。您可以尝试在127.0.0.1
而不是localhost
上提供对网站的访问服务,这有时会使浏览器对CORS请求的要求不高。
答案 1 :(得分:-1)
您可以尝试以下方法:
a2enmod headers
.htaccess
中,例如:Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"