ASP.Net MVC - 경로로 리디렉션하면 리디렉션 루프가 제공됩니다.
-
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.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()를 ActionResult()로 사용
- 함수 Authenticate()를 RedirectToRouteResult()로 사용
이로 인해 브라우저에서 리디렉션 루프 시간 초과가 발생합니다.내가 뭘 놓치고 있는 거지?!
해결책
물건 경로가 기본 형태와 정확히 같은 형태를 가지고있을 수 있습니다.
Return RedirectToRoute("Stuff");
결과 URL에는 {컨트롤러}/{action}/{id}, 예를 들어 로그인/인증이 다시 로그인 컨트롤러의 인증 조치가 있기 때문에 다음 양식이 있습니다.
하려고 노력하다
RedirectToAction("Index", "Stuff");
도움이되기를 바랍니다.
다른 팁
정답은 좋지만:
- 컨트롤러/액션 이름을 Staff/Index에서 다른 이름으로 변경하고 싶다면 어떻게 해야 합니까?
- 그런 다음 global.asax뿐만 아니라 해당 기술을 사용한 모든 위치에서도 값을 변경해야 합니다.
나의 제안:
return RedirectToRoute("Stuff", (RouteTable.Routes["Stuff"] as Route).Defaults);
이제 이 경우 Stuff/Index인 컨트롤러/액션의 이름을 전달하지 않습니다.이렇게 하면 변경 사항을 쉽게 관리할 수 있습니다.
인증 쿠키를 어디에서 설정하는지 또는 사용자를 어떤 식 으로든 인증 된 것으로 표시하는 곳을 알지 못합니다. 그것이 당신이 생략 한 코드에 있습니까?
노력하다
routes.MapRoute( _
"Stuff", _
"",_
New With {.controller = "Stuff", .action = "Index", .id = ""} _
)