我创建了一个自定义RestResource
,它看起来像这样:
/**
* Provides a resource to get/create content data.
*
* @RestResource(
* id = "arcelor_content",
* label = @Translation("Arcelor content"),
* uri_paths = {
* "canonical" = "/api/content/{type}"
* }
* )
*/
class ContentResource extends ResourceBase {
public function get($type) {
// Works
}
public function post($type) {
// Doesn't work
}
}
我已启用资源并在RestUI中设置权限。
GET方法工作正常,但是当我尝试发布时出现此错误:
{
"message": "No route found for \"POST /api/content/buffer\": Method Not Allowed (Allow: GET)"
}
方法不允许!即使已设置权限,已启用发布,缓存也已刷新了一百万次,...
我遇到了a question on the drupal site,它说可以通过在phpdoc标记中添加另一个uri_path来解决此问题,所以我做到了:
/**
* Provides a resource to get/create content data.
*
* @RestResource(
* id = "arcelor_content",
* label = @Translation("Arcelor content"),
* uri_paths = {
* "canonical" = "/api/content/{type}",
* "https://www.drupal.org/link-relations/create" = "/api/content/{type}"
* }
* )
*/
不幸的是,它什么也没做,但是我仍然收到“不允许”错误。
那么,有人知道这是怎么回事吗?
最佳答案
导致“不允许”问题的2种原因:
Content-Type
header 设置为application/hal+json
,这是它们唯一会接受的内容。即使您计划对常规JSON数据执行其他操作,也必须以某种方式(我未能做到)解决此问题X-CSRF-Token
header ,您可以通过转到/rest/session/token
现在,我不再遇到“不允许的”错误!不幸的是,由于主体需要是
hal+json
,所以现在出现了"A fatal error occurred: Class does not exist"
错误。关于drupal - 自定义Drupal 8 REST资源上不允许使用POST方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36280549/