C # — Как переписать URL в MVC3

#asp.net-mvc-3 #url-rewriting

#asp.net-mvc-3 #url-перезапись

Вопрос:

У меня есть URL-адрес, подобный этому: http://website.com/Profile/Member/34

Мне нужно, чтобы этот URL-адрес выполнялся следующим образом: http://website.com/Profile/John

Дано John в качестве имени профиля для идентификатора пользователя = 34.

Кто-нибудь может дать мне указания, как это сделать?

Комментарии:

1. Вы пытаетесь изменить URL-адрес, чтобы, если кто-то перейдет к http://website.com/Profile/Member/34 нему, он отображался как http://website.com/Profile/John в их браузере? Или вы спрашиваете, как выполнить поиск, чтобы пользователь мог вводить http://website.com/Profile/John данные в браузере, и он найдет участника с идентификатором пользователя = 34?

2. Да, Доммер, я хочу, чтобы, если кто-то переходит в Profile / Member / 34, он показывает Profile / John … это не вопрос маршрута контроллера, мне нужно переписать URL…

Ответ №1:

В global.asx вам нужно добавить новый маршрут.

 public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapRoute(
            "Member", // Route name
            "Profile/{member}", // URL with member 
            new { controller = "YourController", action = "Profile"}
        );

    }
  

Вам все равно нужно будет реализовать действие, которое обрабатывает поиск профиля на основе {member} .

Ответ №2:

Вы должны добавить пользовательский маршрут в global.ascx.cs, который будет использоваться для перенаправления на исправный контроллер. Но я предполагаю, что «John» не является уникальным значением, поэтому вам придется сохранить идентификатор в URL-адресе, или, если John является именем пользователя и является уникальным, вы можете использовать этот URL:

 routes.MapRoute("Member", "Profile/{member}", new { controller = "Member", action = "Profile"});
  

Затем в вашем контроллере у вас будет :

 public ActionResult Profile(string username){
    //fetch from the db
}
  

Если «John» не является уникальным значением, я предлагаю вам использовать :

 routes.MapRoute("Member", "Profile/{id}/{member}", new { controller = "Member", action = "Profile"});
  

Таким образом, ваш URL-адрес будет выглядеть http://website.com/Profile/John/34 и ты контролер :

  public ActionResult Profile(int id){
        //fetch from the db
    }
  

Дайте мне знать, если вам понадобится дополнительная помощь!

Комментарии:

1. Привет, Винниг, на самом деле мне нужно сохранить свой контроллер в качестве профиля, мое действие в качестве участника и сохранить поиск по идентификатору пользователя, но когда он отображается в URL, мне нужна перезапись для контроллера / имени пользователя