문제

아마도 쉬운 질문 중 하나 일 것입니다 ..사용자가 성공적으로 인증된 후 사용자를 리디렉션하거나 로그인 페이지로 되돌리려고 합니다.그런데 성공 페이지가 다른 경로에 있어서 리디렉션이 작동하지 않습니다.

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 = ""} _    
)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top