Проблема в том, что вы не сказали MVC ожидать более одного тире;поэтому он схватил найденное и попытался разобрать его таким образом.
Что ж, это просто отстой для нас.
Если вы знаете, что ваш маршрут всегда будет:
{book}-{name}-{perhapsMoreName-{maybeEvenMore}
Тогда мы справимся с этим, но для анализа этого потребуется работа на стороне сервера.
Поверьте мне, было бы гораздо проще использовать косую черту.Если кто-то приходит к вам и жалуется на SEO, попросите его показать вам точное место, где это важно (и почему-то не работают слэши).Я не говорю, что они не правы, но есть много «Я думаю, что это работает с SEO», и это быстро раздражает.
Я собираюсь предложить вам два решения.Решение 1 было бы способом, которым я бы справился (и боролся за него), а решение 2 было бы решением вашей конкретной проблемы с вашей текущей схемой обработки (и я имел дело с решением 2 на практике, и в лучшем случае это очень неприглядно).
Решение 1
Настройте свои маршруты, аналогично тому, как Stack Overflow настраивает их.Это позволило бы вашему SEO-парню иметь свою освященную SEO-систему, и вы получите то, что вы хотите: без язв.
Ваши URL-адреса изменится и будут выглядеть так:1026 *
Затем вы можете использовать bookName для отображения, но не использовать его для получения какого-либо кода.Просто измените ваш метод Show
, чтобы получать элементы по их идентификатору.
Решение 2
Это решение использует ActionFilter для перехвата запросов и анализа того, что к чему.Это странное решение, но оно должно работать.
Я написал ответ, который показал это решение для другого вопроса.Это применимо и здесь, просто измените тип поиска, чтобы запросить базу данных на основе того, что находится в URL.Кроме того, маршрут должен идти внизу ваших маршрутов, иначе он поймает его первым.Применяются все стандартные заявления об отказе от ответственности: используйте параметризованные запросы или ORM, который параметризует их для вас.