2014-10-14 2 views
0

기본적으로 응용 프로그램의 모든 GET 및 POST 요청에 대해 세션이 여전히 유효한지 확인하고 싶지만 실제로는 계속 복사 및 붙여 넣기를하고 싶지 않습니다. 모든 Action Method에서 같은 코드를 사용했기 때문에 Base Controller를 사용하려고 생각했기 때문에 사용법이나 정적 헬퍼 컨트롤러 클래스를 상속받을 수 있습니다. 이러한 방법 중 어느 것이 최선의 (또는 심지어 올바른) 접근법을 취할 것입니까? 코드의ASP.NET MVC의 ActionMethods에서 동일한 RedirectToAction 메서드 사용

[HttpGet] 
    [ValidateInput(false)] 
    public ActionResult SimpleSearch() 
    { 
     // I want to run this code of every ActionResult for a GET AND POST 
     if (!SessionStaticClass.IsUserLoggedIn()) 
     { 
      return RedirectToAction("Login, Login"); 
     } 
    } 

감사

당신은 액션 필터를 사용할 수 있습니다
+0

어떤 버전의 MVC를 사용하고 있습니까? – elolos

+0

5 - 잘 내가 믿는 최신 – user3428422

+1

당신이 로그인 정보를 저장하기 위해 세션을 사용하고 있다면, 당신은 그것을 매우 잘못하고 있습니다. 그리고 당신의 사이트를 매우 불안하게 만듭니다. –

답변

2

: 그런 다음 심지어 속성 컨트롤러 나 액션을 장식하거나 수

public class NotLoggedInFilter : FilterAttribute, IResultFilter 
{ 
    public void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     if (!SessionStaticClass.IsUserLoggedIn()) 
     { 
      filterContext.Result = new RedirectToAction("Login, Login"); 
     } 
    } 
} 

는 동안 실행해야 모든 동작을 전역 필터 컬렉션에 추가하여

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{  
    filters.Add(new NotLoggedInFilter()); 
} 

그러나 사용자 인증을 처리하는 대신 SessionStaticClass 클래스를 사용하는 방법으로 인증 필터를 보라 할 수 있습니다. MVC의 필터 유형에 대한 개요는 here입니다.