asp.net несколько URL, указывающих на один и тот же контроллер - PullRequest
1 голос
/ 22 февраля 2012

Я работаю на сайте социальной сети, где мы реализуем профили, страницы, группы и т. Д. На этом этапе мы работаем с профилями и страницами.У них обоих есть стена, на которой пользователь может разместить статус, картинки и т. Д., Больше похожий на стену на Facebook.

Теперь к контроллеру WallController можно обращаться по двум разным URL-адресам.

www.mysite.com/profile/121/some-user/wall
and
www.mysite.com/page/222/some-page/wall

В левой части страницы я загружаю некоторую основную информацию (имя и т. Д.) И меню.поговорка

www.mysite.com/profile/121/some-user/photos
www.mysite.com/profile/121/some-user/videos
www.mysite.com/profile/121/some-user/songs

Это относится как к (странице, так и к профилю).

вот мой маршрут для страницы

   routes.MapRoute(
           "Page-wall", // Route name
           "page/{id}/{name}/wall", // URL with parameters
           new { controller = "wall", action = "details", id = "", name = "" },
           new { id = @"\d+" },
           new string[] { "PagesNameSpace.Controllers" } // Parameter defaults
           );

и для профиля

      routes.MapRoute(
           "profile-wall", // Route name
           "profile/{id}/{name}/wall", // URL with parameters
           new { controller = "wall", action = "details", id = "", name = "" },
           new { id = @"\d+" },
           new string[] { "ProfileNameSpace.Controllers" } // Parameter defaults
           );

Теперь проблема в том, что я должен определить, какой объект обращается к URL.вот мой WallController

public class WallController : Controller
{
     public ActionResult Details(long id, string name)
     {

        return View(LoadWallData(id));
     }

}

Я вижу словарь значений маршрута как решение, но хотел бы посмотреть, что является лучшим решением для такого рода ситуаций.

помощь будет оценена.

С уважением Parminder

Ответы [ 3 ]

1 голос
/ 22 февраля 2012

Я бы, вероятно, сделал следующее, вы просто добавляете значения в свои маршруты:

Измените свой контроллер:

public class WallController : Controller
{
     public ActionResult Details(long id, string name, string obj)//added param
     {

        return View(LoadWallData(id));
     }
}

А потом ваши маршруты:

routes.MapRoute(
           "Page-wall", // Route name
           "page/{id}/{name}/wall", // URL with parameters
           new { controller = "wall", action = "details", id = "", name = "",
                                                   /*See this>>>> */ obj="page"},
           new { id = @"\d+" },
           new string[] { "PagesNameSpace.Controllers" } // Parameter defaults
           );

routes.MapRoute(
           "profile-wall", // Route name
           "profile/{id}/{name}/wall", // URL with parameters
           new { controller = "wall", action = "details", id = "", name = "",
                                             /*See this>>>> */ obj="profile" },
           new { id = @"\d+" },
           new string[] { "ProfileNameSpace.Controllers" }
           );
0 голосов
/ 22 февраля 2012

Я чувствую, я бы пошел с таким подходом.

public class WallController : Controller
{
 public ActionResult Details(string type ,long id, string name)//added param
 {

    return View(LoadWallData(id));
 }
 }

и мои маршруты

routes.MapRoute(
       "wall-default", // Route name
       "{type}/{id}/{name}/wall", // URL with parameters
       new { controller = "wall", action = "details", id = "", name = "",
                                                               type="profile"},
       new { id = @"\d+" },
       new string[] { "PagesNameSpace.Controllers" } // Parameter defaults
       );

Теперь, просто передав параметр type, я могу получить ссылку действия для страницы и профиля.

Большое спасибо всем.

Привет

0 голосов
/ 22 февраля 2012

используя ((System.Web.Routing.Route)(Url.RequestContext.RouteData.Route)).Url, вы можете получить URL со значениями параметров из MapRoute.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...