Điểm:0

Làm cách nào để định cấu hình api POST tùy chỉnh để chấp nhận yêu cầu với Loại nội dung là "application/x-www-form-urlencoded" trong tiêu đề?

lá cờ bw

Tôi đã tạo một bộ điều khiển trong một mô-đun tùy chỉnh chấp nhận một BƯU KIỆN yêu cầu.
Tôi có một thiết lập sao cho tôi nhận được một BƯU KIỆN yêu cầu từ máy chủ ứng dụng của bên thứ ba tới API này. Nhưng BƯU KIỆN yêu cầu có một Loại nội dung: "ứng dụng/x-www-form-urlencoding" trong tiêu đề.
Và vì điều này, tôi gặp lỗi sau trong các thông báo tường trình gần đây:

Symfony\Component\HttpKernel\Exception\UnsupportedMediaTypeHttpException: Không tìm thấy tuyến nào phù hợp với "Content-Type: application/x-www-form-urlencoded" trong Drupal\Core\Routing\ContentTypeHeaderMatcher->filter() (dòng 49 của /var/ www/html/web/core/lib/Drupal/Core/Routing/ContentTypeHeaderMatcher.php).```

Khi tôi kiểm tra API bằng người đưa thư:

  1. nếu tôi sử dụng Loại nội dung: "application/json" trong tiêu đề, mã bên trong API được thực thi và tôi nhận được phản hồi chính xác.
  2. nếu tôi sử dụng Loại nội dung: "ứng dụng/x-www-form-urlencoding", Tôi nhận được lỗi tương tự.

Tôi không thể định cấu hình máy chủ ứng dụng bên thứ ba để thay đổi Loại nội dung. Vì vậy, tùy chọn duy nhất đối với tôi là định cấu hình API để chấp nhận BƯU KIỆN yêu cầu với Loại nội dung: "ứng dụng/x-www-form-urlencoding". Làm thế nào tôi có thể làm điều đó?

Đã chỉnh sửa: Lớp của tôi mở rộng lớp ResourceBase. Định nghĩa tuyến đường của bộ điều khiển. Ngoài ra tôi đang sử dụng drupal 8.

 * @RestResource(
 * id = "test_abc_callback",
 * nhãn = @Translation("API tùy chỉnh để kiểm tra"),
 * uri_paths = {
 * "tạo" = "/api/v1/test_callback",
 * }
 * )
4uk4 avatar
lá cờ cn
Đó là định dạng mặc định cho các yêu cầu POST. Có gì trong định nghĩa tuyến đường của bộ điều khiển?
lá cờ bw
@ 4k4 Tôi đã chỉnh sửa câu hỏi để thêm định nghĩa tuyến đường. Cảm ơn bạn.
Điểm:0
lá cờ cn

Đây không phải là một bộ điều khiển tùy chỉnh. Đối với câu hỏi ban đầu, bạn sẽ cần xác định phương thức POST trong một tuyến tùy chỉnh. Nhìn thấy https://www.drupal.org/docs/drupal-apis/routing-system/structure-of-routes

Nhưng bạn không nhất thiết cần một bộ điều khiển tùy chỉnh. Bạn có thể thêm bộ nối tiếp vào API REST cho các định dạng đã được xác định trong đối tượng yêu cầu Symfony:

Yêu cầu::initializeFormats

chức năng tĩnh được bảo vệ khởi tạoFormats()
{
    tĩnh::$ định dạng = [
        'html' => ['văn bản/html', 'ứng dụng/xhtml+xml'],
        'txt' => ['văn bản/đơn giản'],
        'js' => ['ứng dụng/javascript', 'ứng dụng/x-javascript', 'văn bản/javascript'],
        'css' => ['văn bản/css'],
        'json' => ['application/json', 'application/x-json'],
        'jsonld' => ['ứng dụng/ld+json'],
        'xml' => ['văn bản/xml', 'ứng dụng/xml', 'ứng dụng/x-xml'],
        'rdf' => ['ứng dụng/rdf+xml'],
        'nguyên tử' => ['ứng dụng/nguyên tử+xml'],
        'rss' => ['ứng dụng/rss+xml'],
        'biểu mẫu' => ['ứng dụng/x-www-form-urlencoding'],
    ];
}

Nhìn thấy https://www.drupal.org/docs/drupal-apis/serialization-api/adding-new-formatsLàm cách nào tôi có thể POST dữ liệu x-www-form-urlencoded từ plugin API REST?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.