2009-11-22 2 views
2

이번 주말에 .NET MVC를 마침내 사용해보고 예상했던대로 몇 가지 장애물이 있습니다.ASP .NET MVC : 특정 조건이 충족되지 않는 경우보기로 리디렉션

개발중인 내 사이트를 암호로 보호하려고합니다. 기본 개념은 매우 간단합니다. BaseController 클래스 (컨트롤러에서 상속되며 다른 모든 컨트롤러 클래스에 상속됩니다)에서 특정 세션 변수가 설정되었는지 확인합니다. 설정되어 있지 않으면 사용자를 암호를 입력 할 수있는 특정보기로 리디렉션해야합니다. 핵심은 액세스하는 사이트의 부분에 관계없이이 요청이 모든 요청에 ​​대해 발생해야한다는 것입니다. 그러나, RedirectToAction가 발생하지 않습니다

if ((Session["siteAuth"] == null || (bool)Session["siteAuth"] != true) && 
     filterContext.ActionDescriptor.ActionName != "EnterPassword") { 
    RedirectToAction("EnterPassword"); 
} 
else { 
    base.OnActionExecuting(filterContext); 
} 

OnActionExecuting이 모든 요청에 ​​실행 : 무시 OnActionExecuting를 BaseController 클래스에서 다음과 같은 확인 : 이것은 내가 시도했지만 실패한 것입니다. 기본적으로 렌더링은 그렇지 않으면 렌더링 할 뷰를 렌더링합니다.

내가 찾은 가장 가까운 해결책은 here이지만 모든 요청에 ​​대해 광산을 사용해야합니다.

내가 잘못하고있는 것에 대한 힌트가 있습니까?

답변

12

[Authorize]으로 동작이나 컨트롤러를 꾸미는 것이 어떨까요?

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     filterContext.Result = RedirectToAction("EnterPassword"); 
    } 

을하지만 다니엘 Liuzzi 말했듯이, 그것을 할 수있는 다른 더 좋은 방법이 있습니다 :

+0

+1. 그럼에도 불구하고 옳은 대답입니다. – RichardOD

+0

아마도 내가 그런 존재를 전혀 모르기 때문에. 지금 조사 중입니다. 감사! –

3

당신은 filterContext.Result을 설정해야합니다.

+0

+1이 질문에 대한 가장 좋은 대답은 아닐 수도 있지만, 간단하게 '권한 부여'보다 더 복잡한 것이 필요했습니다. 건배. –

관련 문제