BadRequestHttpException POST REST资源 [英] BadRequestHttpException POST REST Resource
问题描述
我正在尝试创建自定义REST资源。我的模块如下:
I am attempting to create a custom REST resource. My module is as follows:
/example.info.yml
/example.info.yml
name: Example
description: ''
type: module
core: 8.x
version: DEV
dependencies:
- serialization
- basic_auth
- rest
/src/Plugin/rest/resource/BasicGetResource.php
/src/Plugin/rest/resource/BasicGetResource.php
namespace Drupal\Example\Plugin\rest\resource;
use Drupal\rest\Plugin\ResourceBase;
use Drupal\rest\ResourceResponse;
/**
* Provides an Example Resource
*
* @RestResource(
* id = "example_resource",
* label = @Translation("Example Resource"),
* uri_paths = {
* "canonical" = "/api/basic",
* "https://www.drupal.org/link-relations/create" = "/api/basic"
* }
* )
*/
class ExampleResource extends ResourceBase {
/**
* Responds to GET requests.
* @return \Drupal\rest\ResourceResponse
*/
public function get() {
$response = ['data' => 'Basic Authentication'];
return new ResourceResponse($response);
}
/**
* Responds to POST requests.
* @return \Drupal\rest\ResourceResponse
*/
public function post($data) {
$response = ['data' => $data];
return new ResourceResponse($response);
}
}
/config/install/rest.resource.example_resource。 yml
/config/install/rest.resource.example_resource.yml
langcode: en
status: true
dependencies:
module:
- basic_auth
- example
- serialization
_core:
default_config_hash: NSa-WWwv2X-ogB4ojX2-m6rCsWMY6tzOZFZySnI5yfM
id: example_resource
plugin_id: example_resource
granularity: resource
configuration:
methods:
- GET
- POST
formats:
- json
authentication:
- basic_auth
将以下Javascript附加到POST块:
Attaching the following Javascript to a Block for POST:
var token;
var credentials = btoa("[USERNAME]:[PASSWORD]");
var settings = {
"async": true,
"crossDomain": true,
"url": "/rest/session/token",
"method": "GET",
"headers": {"Content-Type": "application/x-www-form-urlencoded"},
};
$.ajax(settings).done(function (response) {
token = response;
});
$('#btn-basic-post').click(function() {
var form = new FormData();
form.append("message", "Hello World!");
var settings = {
"async": true,
"crossDomain": true,
"url": "/api/basic?_format=json",
"method": "POST",
"headers": {
"x-csrf-token": token,
"authorization": "Basic " + credentials,
"cache-control": "no-cache",
"Content-Type": "application/json",
"Accept": 'application/json',
},
"processData": false,
"contentType": false,
"mimeType": "multipart/form-data",
"data": form
}
$.ajax(settings).done(function (response) {
alert(response.data);
});
});
我收到状态400,响应为{ message: Syntax error}。以下日志是记录:
I receive status 400, with response {"message":"Syntax error"}. The following log is records:
Symfony\Component\HttpKernel\Exception\BadRequestHttpException: Syntax error in Drupal\rest\RequestHandler->handle() (line 101 of C:\Users\bamberj\Sites\devdesktop\drupal-rest\core\modules\rest\src\RequestHandler.php).
任何建议都将不胜感激。谢谢。
Any advice would be much appreciated. Thanks.
https:/ /www.drupal.org/project/drupal/issues/2928340
推荐答案
数据未正确编码..
var data = JSON.stringify({
message: 'Hello World',
});
var settings = {
"async": true,
"crossDomain": true,
"url": "/api/basic?_format=json",
"method": "POST",
"headers": {
"x-csrf-token": token,
"authorization": "Basic YWRtaW46YWRtaW4=",
"cache-control": "no-cache",
"Content-Type": "application/json",
"Accept": 'application/json',
},
"data": data,
"dataType": "JSON",
}
$.ajax(settings).done(function (response) {
console.log(response);
});
感谢cilefen。参见 https://www.drupal.org/project/drupal/issues / 2928340#comment-12371675 。
Thanks cilefen. See https://www.drupal.org/project/drupal/issues/2928340#comment-12371675.
这篇关于BadRequestHttpException POST REST资源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!