diff --git a/core/modules/media_library/src/MediaLibraryState.php b/core/modules/media_library/src/MediaLibraryState.php
index e1f0b4632dcd7206ce9dae7ebe974975bfda55fe..6e1773073ca8a50e6869076cce1638d3739246bf 100644
--- a/core/modules/media_library/src/MediaLibraryState.php
+++ b/core/modules/media_library/src/MediaLibraryState.php
@@ -101,10 +101,10 @@ public static function fromRequest(Request $request) {
     // all validation runs.
     $state = static::create(
       $query->get('media_library_opener_id'),
-      $query->get('media_library_allowed_types', []),
+      $query->all('media_library_allowed_types'),
       $query->get('media_library_selected_type'),
       $query->get('media_library_remaining'),
-      $query->get('media_library_opener_parameters', [])
+      $query->all('media_library_opener_parameters')
     );
 
     // The request parameters need to contain a valid hash to prevent a
@@ -224,7 +224,7 @@ public function getOpenerId() {
    *   The media type IDs.
    */
   public function getAllowedTypeIds() {
-    return $this->get('media_library_allowed_types');
+    return $this->all('media_library_allowed_types');
   }
 
   /**
@@ -268,7 +268,32 @@ public function getAvailableSlots() {
    *   An associative array of all opener-specific parameter values.
    */
   public function getOpenerParameters() {
-    return $this->get('media_library_opener_parameters', []);
+    return $this->all('media_library_opener_parameters');
+  }
+
+  /**
+   * Returns the parameters.
+   *
+   * @param string|null $key
+   *   The name of the parameter to return or null to get them all.
+   *
+   * @return array
+   *   An array of parameters.
+   *
+   * @todo Remove this when Symfony 4 is no longer supported.
+   *   See https://www.drupal.org/node/3162981
+   */
+  public function all(string $key = NULL): array {
+    if ($key === NULL) {
+      return $this->parameters;
+    }
+
+    $value = $this->parameters[$key] ?? [];
+    if (!is_array($value)) {
+      throw new \UnexpectedValueException(sprintf('Unexpected value for parameter "%s": expecting "array", got "%s".', $key, get_debug_type($value)));
+    }
+
+    return $value;
   }
 
   /**
diff --git a/core/modules/media_library/tests/src/Kernel/MediaLibraryStateTest.php b/core/modules/media_library/tests/src/Kernel/MediaLibraryStateTest.php
index ffc5dd27ee4825b509f215d17876e6e85a206b33..bc4419a3b5a20c6ab14c19c5f32dc9138c398a65 100644
--- a/core/modules/media_library/tests/src/Kernel/MediaLibraryStateTest.php
+++ b/core/modules/media_library/tests/src/Kernel/MediaLibraryStateTest.php
@@ -4,6 +4,7 @@
 
 use Drupal\Core\Cache\Cache;
 use Drupal\Core\Cache\CacheableDependencyInterface;
+use Drupal\Core\Http\InputBag;
 use Drupal\KernelTests\KernelTestBase;
 use Drupal\media_library\MediaLibraryState;
 use Drupal\Tests\media\Traits\MediaTypeCreationTrait;
@@ -286,7 +287,13 @@ public function testFromRequest(array $query_overrides, $exception_expected) {
       $this->expectException(BadRequestHttpException::class);
       $this->expectExceptionMessage("Invalid media library parameters specified.");
     }
-    $state = MediaLibraryState::fromRequest(new Request($query));
+
+    // @todo Remove this when Symfony 4 is no longer supported.
+    //   See https://www.drupal.org/node/3162981
+    $request = new Request();
+    $request->query = new InputBag($query);
+
+    $state = MediaLibraryState::fromRequest($request);
     $this->assertInstanceOf(MediaLibraryState::class, $state);
   }