2010-07-22 3 views
0

Ограничение пользователя от контроллера прыжка и методов действий

Приложение ASP.NET MVC 1.0 больше похоже на рабочий процесс.

Средства: Родитель метод действия контроллера (аутентификация) -> метод по уходу за детьми 1 Действие -> Ребенок 2 Метод Действие -> Ребенок п Действие

Теперь, как только посетитель завершает проверку подлинности с помощью метода действия родительского контроллера он может создать URL-адрес и перейти непосредственно к методу действий child-2. Мы хотим избежать этого, и в этом случае мы хотим, чтобы они были на странице с ошибкой.

Как мы можем реализовать, чтобы запретить пользователю переходить от 1 к другому методу действий?

ответ

2

Вы можете использовать TempData, предоставляющий некоторый ключ, и если это значение не существует, вы можете перенаправить пользователя на предыдущий шаг.

Или вы можете украсить последующие методы действий с помощью [HttpPost], установить каждое действие Form следующему действию в контроллере, и действия не будут доступны для GET запросов.

+0

Спасибо большое! Я думал о более продвинутом решении. У нас есть много рабочих процессов, подобных этим. Таким образом, работа была бы огромной. Можем ли мы украсить метод Action, чтобы мы могли достичь того же? – amit

+0

Вы можете использовать 'HandleErrorAttribute', т. Е .:' [HandleError (View = "YourErrorPageView", ExceptionType = typeof (TriedToGoToStepNotAuthorizedForException))]. Вы также можете создать пользовательский 'FilterAttribute' (или расширить' HandleErrorAttribute'), который позволит вам указать любые критерии, необходимые для выполнения метода, такие как HttpMethods, QueryString key/values ​​и т. Д. I что использование атрибутов таким образом позволит вам ActionMethod сосредоточиться на своем собственном выполнении, в то время как 'FilterAttribute' может обрабатывать решение о том, должен ли этот метод выполняться. –

+0

Есть ли способ, которым мы имели Предыдущее посещение (имя контроллера/действия), что-то вроде referrer? Чтобы я мог проверить метод дочернего действия, если реферер является родителем или нет! Пожалуйста, порекомендуйте. – amit

0

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

[Authorize] 
public ActionResult Parent(string color) 
{ 
    if(color=="Red") 
     return Child1(); 
    return Child2(); 
} 

private ActionResult Child1() 
{ 
    return View("this"); 
} 

private ActionResult Child2() 
{ 
    return View("that"); 
} 

~/Контроллер/Родительский маршрут к контроллеру.Parent().

~/Контроллер/Детский 1 маршрут до 404: Не найдено. ~/Контроллер/Ребенок2 переходит на 404: Не найдено.

+0

Дорогой Байрон .. Возможно, вы не можете работать: Метод действия - это общедоступные методы, доступные для доступа через Интернет. ЕСЛИ вы делаете это частным, вы не можете перейти от любого метода действий через RedirectToAction – amit

+0

Точно.Пока ваш родительский метод находится в том же классе, что и ваши дочерние методы, вы можете вызвать return ChildMethod(). –

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