ASP.Net MVC - перенаправление на маршрут дает Цикл перенаправления

StackOverflow https://stackoverflow.com/questions/237977

  •  04-07-2019
  •  | 
  •  

Вопрос

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

Вот мои маршруты в 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.vbViews/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() Как ActionResult()
  • Функция Authenticate() Как RedirectToRouteResult()

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

Это было полезно?

Решение

Может ли быть так, что ваш маршрут Stuff имеет точно такую же форму, что и по умолчанию, поэтому, когда вы вызываете

Return RedirectToRoute("Stuff");

результирующий URL-адрес имеет вид:{контроллер}/{действие}/{идентификатор}, напримерВойдите в систему / аутентифицируйтесь снова, поскольку вы находитесь внутри действия аутентификации Login-controller.

Попытайтесь

RedirectToAction("Index", "Stuff");

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

Другие советы

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

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

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

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

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

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

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

попробуй

routes.MapRoute( _    
"Stuff", _
"",_  
New With {.controller = "Stuff", .action = "Index", .id = ""} _    
)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top