Score:0

วิธีกำหนดค่า POST api แบบกำหนดเองให้ยอมรับคำขอที่มี Content-Type เป็น "application/x-www-form-urlencoded" ในส่วนหัว

ธง bw

ฉันสร้างคอนโทรลเลอร์ในโมดูลแบบกำหนดเองที่ยอมรับ a โพสต์ ขอ.
ฉันมีการตั้งค่าที่ฉันได้รับ โพสต์ คำขอจากเซิร์ฟเวอร์แอปพลิเคชันของบุคคลที่สามไปยัง API นี้ แต่ โพสต์ คำขอมี ประเภทเนื้อหา: "application/x-www-form-urlencoded" ในส่วนหัว
และด้วยเหตุนี้ฉันจึงได้รับข้อผิดพลาดต่อไปนี้ในข้อความบันทึกล่าสุด:

Symfony\Component\HttpKernel\Exception\UnsupportedMediaTypeHttpException: ไม่พบเส้นทางที่ตรงกับ "Content-Type: application/x-www-form-urlencoded" ใน Drupal\Core\Routing\ContentTypeHeaderMatcher->filter() (บรรทัดที่ 49 จาก /var/ www/html/web/core/lib/Drupal/Core/Routing/ContentTypeHeaderMatcher.php).```

เมื่อฉันทดสอบ API โดยใช้บุรุษไปรษณีย์:

  1. ถ้าฉันใช้ ประเภทเนื้อหา: "application/json" ในส่วนหัว มีการดำเนินการโค้ดภายใน API และฉันได้รับการตอบกลับที่ถูกต้อง
  2. ถ้าฉันใช้ ประเภทเนื้อหา: "application/x-www-form-urlencoded"ฉันได้รับข้อผิดพลาดเดียวกัน

ฉันไม่สามารถกำหนดค่าเซิร์ฟเวอร์แอปพลิเคชันบุคคลที่สามเพื่อเปลี่ยน ชนิดของเนื้อหา. ดังนั้น ทางเลือกเดียวสำหรับฉันคือกำหนดค่า API ให้ยอมรับ โพสต์ ขอกับ ประเภทเนื้อหา: "application/x-www-form-urlencoded". ฉันจะทำอย่างนั้นได้อย่างไร

แก้ไข: ชั้นเรียนของฉันขยายคลาส ResourceBase การกำหนดเส้นทางของคอนโทรลเลอร์ นอกจากนี้ฉันกำลังใช้ drupal 8

 * @เรสท์รีซอร์ส(
 * id = "test_abc_callback",
 * label = @Translation("API แบบกำหนดเองสำหรับการทดสอบ"),
 * uri_paths = {
 * "สร้าง" = "/api/v1/test_callback",
 * }
 * )
4uk4 avatar
cn flag
นั่นเป็นรูปแบบเริ่มต้นสำหรับคำขอ POST คำจำกัดความเส้นทางของคอนโทรลเลอร์คืออะไร
bw flag
@ 4k4 ฉันได้แก้ไขคำถามเพื่อเพิ่มคำนิยามเส้นทาง ขอขอบคุณ.
Score:0
ธง cn

นี่ไม่ใช่ตัวควบคุมแบบกำหนดเอง สำหรับคำถามเดิม คุณจะต้องกำหนดวิธีการ POST ในเส้นทางที่กำหนดเอง ดู https://www.drupal.org/docs/drupal-apis/routing-system/structure-of-routes

แต่คุณไม่จำเป็นต้องใช้คอนโทรลเลอร์แบบกำหนดเอง คุณสามารถเพิ่มซีเรียลไลเซอร์ให้กับ REST API สำหรับรูปแบบที่กำหนดไว้แล้วในอ็อบเจ็กต์คำขอ Symfony:

คำขอ::เตรียมใช้งานรูปแบบ

ฟังก์ชันคงป้องกัน initializeFormats()
{
    คงที่::$ รูปแบบ = [
        'html' => ['ข้อความ/html', 'แอปพลิเคชัน/xhtml+xml'],
        'txt' => ['ข้อความ/ธรรมดา'],
        'js' => ['แอปพลิเคชัน/จาวาสคริปต์', 'แอปพลิเคชัน/x-จาวาสคริปต์', 'ข้อความ/จาวาสคริปต์'],
        'css' => ['ข้อความ/css'],
        'json' => ['แอปพลิเคชัน/json', 'แอปพลิเคชัน/x-json'],
        'jsonld' => ['แอปพลิเคชัน/ld+json'],
        'xml' => ['ข้อความ/xml', 'แอปพลิเคชัน/xml', 'แอปพลิเคชัน/x-xml'],
        'rdf' => ['แอปพลิเคชัน/rdf+xml'],
        'atom' => ['แอปพลิเคชัน/atom+xml'],
        'rss' => ['แอปพลิเคชัน/rss+xml'],
        'แบบฟอร์ม' => ['ใบสมัคร/x-www-form-urlencoded'],
    ];
}

ดู https://www.drupal.org/docs/drupal-apis/serialization-api/adding-new-formats และ ฉันจะโพสต์ข้อมูล x-www-form-urlencoded จากปลั๊กอิน REST API ได้อย่างไร

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา