Как мы можем направить что-то вроде {calendar} / {controller} / {action} / {id} - PullRequest
0 голосов
/ 07 октября 2010

Как новичок в MVC, я пытаюсь выяснить, каков лучший способ выполнить маршрут для моих нужд, и Мне совсем не повезло , поэтомуЯ прошу любую помощь

Мой webApp управляется Календари , и для каждого Календаря есть множество действий

  • Подписаться
  • Редактировать календарь
  • Просмотреть победителей
  • Daily Challenge
  • и т. Д. *

и я бы хотел избегать передачи чего-то вроде

mydomain.com/calendar/2

моя идея заключается в том, чтобы скрыть ID, чтобы никто не мог иметь логический доступ к другим календарям , например

mydomain.com/q2tsT

, где q2tsT может быть произвольно сгенерированной строкой из 10 символов, а затем Я хотел бы иметь маршруты , такие как:

mydomain.com/q2tsT/subscribe
mydomain.com/q2tsT/daily-challenge
mydomain.com/q2tsT/winners
mydomain.com/q2tsT/prizes

Как мне настроить мой маршрут для такой работы?

что-то вроде:

routes.MapRoute(
    "CalendarRoute",
    "{calendar}/{controller}/{action}/{id}",
    new { 
        calendar = "Empty", 
        controller = "Frontend", 
        action = "Index", 
        id = UrlParameter.Optional }
);

но что я буду делать с calendar?где я могу забрать его , чтобы я мог преобразовать его в идентификатор, чтобы запросы к БД были быстрее

Я немного потерян здесь: (

1 Ответ

1 голос
/ 07 октября 2010

Во-первых, даже «скрывая» идентификатор календаря за строкой, ничто не мешает пользователю попытаться угадать соответствующий идентификатор. Какое бы решение вы ни использовали, в действиях должна быть встроена защита, обеспечивающая отображение соответствующих данных только авторизованным пользователям.

Чтобы получить календарь - просто передайте строковое значение в метод действия и расшифруйте его там.

routes.MapRoute(
    "CalendarRoute",
    "{calendar}/{controller}/{action}/{id}",
    new { 
        calendar = "Empty", 
        controller = "Frontend", 
        action = "Index", 
        id = UrlParameter.Optional }
);

public ActionResult Index(string calendar, int? id) {
   // decode the calendar into something useful
...    
}
...