2012-07-14 3 views
0

프런트 엔드와 백엔드가있는 MVC3 웹 응용 프로그램이 있습니다. 백엔드에서 각 동작은 사용자가 로그인하지 않은 경우 다른 동작으로 리디렉션되는 if..then..else로 보호됩니다 (세션을 검사 함). 그것은 창 역할없이 이것을한다.액션으로 리디렉션 할 수있는 속성을 만들 수 있습니까?

체크를 수행하고 각 액션에 동일한 코드를 반복해서 삽입하지 않아도 사용자를 로그인 페이지로 리디렉션 할 수 있는지 궁금합니다.

내 관리 컨트롤러에서 파생 된 어떤 바이러스에 다음과 같은 다음과 같은 멤버를 추가 된 basecontroller을 만든 1

편집 # 말했다 :

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     try 
     { 
      if (Session["loggedIn"] == null || (bool)Session["loggedIn"] != true) 
      { 
       TempData["targetAction"] = ControllerContext.ParentActionViewContext.RouteData.Values["action"] + "/" + ControllerContext.ParentActionViewContext.RouteData.Values["controller"]; 
       RedirectToRoute("Admin/Login"); 
      } 
     } 
     catch (NullReferenceException) 
     { 
      RedirectToRoute("Admin/Login"); 
     } 
    } 

그러나이 코드는 does'nt 작업. 누군가 나에게 무엇이 잘못되었는지 말해 줄 수 있습니까?

+0

그냥 함수 호출로 포장하십시오. –

+0

속성이 다른 속성을 상속합니까? 그렇다면 어떤 속성입니까? 예를 들어 나는 커스텀'AuthorizeAttribute'를 가지고 이것을 수행했다. – Mohayemin

답변

6

이렇게 쉽게 할 수 있습니다.

그냥 Controller 클래스, 에서 상속 공통 BaseController를 만드는 속성을 사용하고 BaseController

에서

재정 BaseController에서 OnActionExecuting 이벤트를 모든 컨트롤러를 상속하고에 인증 로직을 넣을 필요가 없습니다 .

OnActionExecuting 이벤트는 작업이 호출 될 때마다 실행됩니다. 당신이 조치로 리디렉션해야하는 경우

,이 코드는 내장 AuthorizeAttribute 필터 무엇 있다는

filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "action", "Index" }, { "controller", "Account" } }); 
+0

나는 당신이 말한대로 시도한 코드로 내 게시물의 끝에 편집을 추가했다. 제발 뭐가 잘못 됐니? 감사. –

+0

업데이트를 확인하십시오. 감사합니다 – Virus

+0

문제는 요청이 끝난 후 RedirectToRoute()가 실행된다는 것입니다. 그 요청은 우리가 원하는 것이 아닙니다. 따라서 즉시 리다이렉트하기 위해 우리는 대답과 같이 filterContext.Result를 사용할 수있다. – Virus

0

도움이 될 것입니다.

AuthorizeAttribute 필터는 글로벌 수준, 컨트롤러 수준 또는 작업 수준에서 사용할 수 있습니다. 내장 된 Authorize 필터가 충분하지 않은 경우이 post에 설명 된대로 상속하여 사용자 정의 필터를 쉽게 만들 수 있습니다.

관련 문제