BadRequestHttpException POST REST资源 [英] BadRequestHttpException POST REST Resource

查看:169
本文介绍了BadRequestHttpException POST REST资源的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建自定义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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆