ASP.Net MVC - перенаправление на маршрут дает Redirect Loop - PullRequest
5 голосов
/ 26 октября 2008

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

Вот мои маршруты в Globals.asax:

routes.MapRoute( _
    "Default", _
    "{controller}/{action}/{id}", _
    New With {.controller = "Login", .action = "Index", .id = ""} _
    )
routes.MapRoute( _
    "Stuff", _
    "{controller}/{action}/{id}", _
    New With {.controller = "Stuff", .action = "Index", .id = ""} _
    )

У меня есть 2 контроллера: LoginController.vb и StuffController.vb. Файл Views/Login/Index.aspx содержит простую форму с кодом:

<form method="post" action="/Login/Authenticate">

LoginController содержит следующий код:

Function Authenticate() As RedirectToRouteResult
    ' authentication code commented out  ;o)

    Return RedirectToRoute("Stuff")
End Function

А StuffController содержит следующее:

Function Index()
    ' show stuff..

    Return View()    ' return /Views/Stuff/Index.aspx
End Function

Вот что я пробовал до сих пор:

  • Функция Authenticate ()
  • Функция Authenticate () As ActionResult ()
  • Функция Authenticate () As RedirectToRouteResult ()

Все это вызывает тайм-аут цикла перенаправления в браузере. Чего мне не хватает?!

Ответы [ 4 ]

11 голосов
/ 29 ноября 2010

Правильный ответ это хорошо, но:

  • что если вы захотите изменить имя контроллера / действия с Staff / Index на другое?

- тогда вам нужно будет изменить значения не только в global.asax, но и во всех местах, где вы использовали технику.

Мое предложение:

return RedirectToRoute("Stuff", (RouteTable.Routes["Stuff"] as Route).Defaults);

Теперь, в этом случае, вы не передаете имена контроллера / действия, которые соответственно являются Stuff / Index. Это позволит вам легко управлять изменениями.

7 голосов
/ 26 октября 2008

Возможно, ваш маршрут Stuff имеет ту же форму, что и маршрут по умолчанию, поэтому при вызове

Return RedirectToRoute("Stuff");

полученный URL имеет вид: {controller} / {action} / {id}, например Войдите / Аутентифицируйте снова, так как вы находитесь в действии Аутентификация контроллера входа.

Попробуйте

RedirectToAction("Index", "Stuff");

Надеюсь, это поможет.

0 голосов
/ 26 декабря 2008

1001 * попробовать *

routes.MapRoute( _    
"Stuff", _
"",_  
New With {.controller = "Stuff", .action = "Index", .id = ""} _    
)
0 голосов
/ 26 октября 2008

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

...