Why does this route work with a slash and not a dash?
The dash is not the problem, you could use a dash in the fixed part, but ...


  Unlike generic Symfony routes, Drupal requires that a slug occupies a
  complete path part - the portion between two slashes (or everything
  after the last slash).


https://www.drupal.org/docs/8/api/routing-system/parameters-in-routes/using-parameters-in-routes

Alternatively you can use path processing to rewrite the path to comply with the Drupal routing system. See Do new routes in Drupal 8 *require* a static first portion?