2014-02-19 2 views
1

У меня есть контроллер и вид, который возвращает информацию о книге, когда я передаю ID и т.д .:Пользовательские маршрутизации без изменения URL

/Content/Index?id=1 

Теперь я хочу, чтобы сделать это как дружественный URL для конечного пользователя. Для например: Книги/BookName (Название книги Id 1 сопоставлена)

Так я добавил значение маршрута в global.asax как:

route.maprRoute(name:"custom", url:"Books/{bookname}", 
defaults: new {controller = "bookMap", action ="index"} 

в «BookMap» контроллер я получаю bookname и преобразуйте его в ID (который равен 1) и выполните перенаправлениеToAction в Content/Index, передав ID в качестве параметра. Это прекрасно работает. Но проблема в том, что я хочу сохранить дружеское имя после перенаправления на представление. Теперь он изменяется на Content/Index? Id = 1. Но я хочу сохранить дружественный URL-адрес, который называется Books/BookName. Как я могу достичь этого PLS.

+0

Цель перенаправления, чтобы не дублировать код в «BookMap» контроллера. Я хочу, чтобы контроллер «Content» генерировал представление. – pili

ответ

0

Вы можете использовать HttpContext.RewritePath(url), чтобы сделать переадресацию «внутренне», которая хранит внешний URL. Используйте это вместо RedirectToAction. Обратите внимание, однако, что в настоящее время он не поддерживается программой MVC, поэтому она будет немного «взломана» для реализации.

+0

Хорошо Спасибо. Но как вы думаете, поисковая система будет иметь проблемы с распознаванием этого друга URL – pili

+0

@pili - этот вопрос касается не SEO. Вот как вы выполняете то, о чем просили. С точки зрения SEO это зависит от вас. – Haney

+0

Я согласен, так как он не поддерживается в MVC, там должна быть веская причина. Поэтому я просто проверял, это трюк, чтобы сделать это или правильно. Если это правильный способ, мне не нужно беспокоиться о SEO. – pili

0

Вы должны изменить свой маршрут для этого:

routes.MapRoute(
     "Books", 
     "book/{bookname}/{bookid}", 
     new { controller = "book", action = "Index", bookname = UrlParameter.Optional }, 
     new { id = @"\d+" } 
    ); 
+0

Спасибо. Что это делает id = @ "\ d +" – pili

+0

Это ограничение, и, кстати, имя книги не должно быть необязательным параметром url. Например, вы можете достичь/book/{id} или/book/{name}/{id} – antao

Смежные вопросы