2010-04-20 4 views
20

내가 몇 가지 시나리오에서 다른 페이지로 리디렉션 할 필요가 MVC에 상당히 새로운 있지만, 리디렉션이 ... 웹폼에서 사용되는 표준 리디렉션 예를 들어 표준 Response.Redirect()ASP.NET MVC : MVC의 페이지/작업으로 리디렉션하는 올바른 방법은 무엇입니까?

즉 대체를 정확하게 확실하지 않다 :

1) 사용자가 로그 아웃 할 때 (양식 사인 인 동작) 로그인 페이지로 리디렉션하고 싶습니다.

여러 리디렉션이 오류, 뭔가 원인이 어떤 경우에 호출되는 것으로 보인다 컨트롤러 또는 기본 컨트롤러 이벤트 등 Initialize에서

2), 나는 다른 페이지 (AbsoluteRootUrl + 컨트롤러 + 액션)로 리디렉션 할 페이지가 이미 리디렉션되고 있다는 사실과 관련이 있습니까? 현재 요청을 취소하고 리디렉션하는 방법은 무엇입니까?

업데이트 :

이 질문에 (System.Web.Mvc.Controller Initialize)에 대한 답변은 Initialize는 사용하지 말아야하고 OnActionExecuting 사용하는 것을 나타낸다?

Initialize을 사용하면 안되는 이유 또는 OnAuthorization을 사용하는 것이 더 좋은 이유에 대한 의견이 있으십니까?

추가 정보 :

이 블로그 게시물 (http://blog.wekeroad.com/blog/aspnet-mvc-securing-your-controller-actions/가) 내가 기본 컨트롤러 클래스에서 해당 이벤트에이 추가 같아요 (위의 링크에 표시된대로) OnActionExecuting가 인증을 위해 유용하다는 것을 나타냅니다 모든 미세하다 페이지는 MVC에서 액션을 실행하므로 많은 차이를 만들 수 없으며 리디렉션 기능이 쉬워야합니다. 이것은 의미가 있지만,이 사건 이전에 어떤 일이 일어날 수 있으며, 그 사건이 무엇인지 질문하게 만드는 것은 나에게 의미가있는 것처럼 보입니다. ..

+0

이 기본 컨트롤러가 이벤트 초기화 무엇 당신이 언급 한 :

라우팅 엔진이 자동으로 당신이 간단하게 할 컨트롤러의 index 액션에서 리디렉션 할 말은 경우에 와서 요청을 처리? –

+0

@Mahesh Velaga : Initialize 이벤트를 재정의하는 기본 컨트롤러가 있습니다. 즉, protected override Initialize (System.Web.Routing.RequestContext requestContext) ... 거기에 보안 검사가 있습니다.이 검사를 기반으로 사용자를 리디렉션해야합니다. –

+0

이유 tempdata 또는 viewdata에서 일부 값을 설정하지 않고 RedirectToAction을 사용하여 리디렉션 할 수있는 값을 기반으로 제어기 작업에 도달하면? –

답변

19

1) (양식 signout 액션에서) 나는 로그인 페이지로 리디렉션합니다. 컨트롤러 또는 기본 컨트롤러의 경우 예를 들어 Initialze에서

public ActionResult Logout() { 
    //log out the user 
    return RedirectToAction("Login"); 
} 

2), 나는

왜 당신이 컨트롤러 초기화에서 리디렉션 할 것이다 다른 페이지 (AbsoluteRootUrl + 컨트롤러 + 액션)로 리디렉션하려면?

public ActionResult Index() { 
    return RedirectToAction("whateverAction", "whateverController"); 
} 
+0

첫 번째 항목이 계정 컨트롤러에 있음을 알고 싶을 수도 있습니다. – GalacticCowboy

+0

나는 아직도 FormsAuthentication을 사용한다고 생각한다.return RedirectToAction ("Login") 대신 RedirectToLoginPage()를 사용해야합니다. –

+0

컨트롤러 초기화 이벤트가 멀티 테넌시 (multi-tenancy)의 하위 도메인을 탐지하고이를 바탕으로 하위 도메인 변경 사항을 탐지하고이를 기반으로 사용자 인증을 확인합니다. –

2
RedirectToAction("actionName", "controllerName"); 

그것은 다른 오버로드를 가지고뿐만 아니라, 최대 확인하시기 바랍니다 OnActionExecuting 갈을주는 것이다!

또한 신규 사용자이고 T4MVC을 사용하지 않는 경우 사용하는 것이 좋습니다.

그것은 당신이 리디렉션() 메소드를 사용하지 않는, 로그인 페이지에서 로그인 페이지 /로 리디렉션하는 행위, 컨트롤러, 뷰 등 (더 이상 마법 문자열)

+0

숫자 1에는 좋지만 번호 2에는 사용할 수 없습니다. –

+0

실제로 사례 번호 2, RedirectToAction이 무시 된 것으로 보입니까? –

4

1)에 대한 intellisence 제공합니다. FormsAuthentication.RedirectToLoginPage()FormsAuthentication.RedirectFromLoginPage()을 사용하십시오!

2) 일반 시나리오에서는 RedirectToAction ("action", "controller") 만 사용해야합니다. Initialize 메소드를 리디렉션 하시겠습니까? 왜? 나는 왜 당신이 이것을하고 싶지 않겠는가, 그리고 대부분의 경우 당신은 당신의 접근 방식을 재검토해야한다.당신이 인증을 위해이 작업을 수행하려면이 확실히 잘못된 방법입니다 사용 컨트롤러 또는 대신 방법 :에 [Authorize] 속성 (아주 작은 기회와 함께하면 예외 다면서)

UPD : 일부 보안이있는 경우 초기화 방법에 검사하고 사용자가이 방법에 액세스 할 수 없습니다, 당신은 몇 가지 작업을 수행 할 수 있습니다 가)

Response.StatusCode = 403; 
Response.End(); 

이 다시 로그인 페이지로 사용자를 보낼 것입니다. 사용자 정의 위치에 그를 보낼 경우이 같은 것을 할 수 있습니다 (시주의해야 : 의사)

Response.Redirect(Url.Action("action", "controller")); 

전체 URL을 지정할 필요합니다. 이것은 충분해야합니다. 당신은 완전히 전체 URL을 주장하는 경우 : 사용자가 로그 아웃

Response.Redirect(new Uri(Request.Url, Url.Action("action", "controller")).ToString()); 
+0

인증 체크가 있지만 멀티 테넌시 응용 프로그램에서 사용자를 다시 확인하고 다른 보안 검사를 수행하는 것과 관련이 있습니다. 위반이있는 경우 사용자는 로그 아웃되어 어딘가로 리디렉션되어야합니다 (일반 로그인, 특정 로그인, 홈 페이지 또는 다른 페이지 일 수 있음). –

+0

글쎄요. 내 답변이이를 커버하는 것 같습니다. 내가 뭔가를 놓친 경우를 제외하고는 기꺼이 도와 드리겠습니다.) –

+0

리디렉션이 작동하지 않는 것으로 보입니다. 다시 생각해보십시오. 질문에 더 많은 정보를 추가하십시오 ... –

관련 문제