2011-02-10 2 views
5

Asp.net MVC 3을 배우고 있습니다. 컨트롤러의 다른 메서드를 실행하기 전에 실행될 메서드를 정의하는 방법이 있습니까? 즉 기본 "Controller"클래스의 생성자와 같이 작동해야합니다.공통 기능을 구현하는 곳 Asp.net MVC

여기에는 사용자 세션 확인/로그인 페이지로 리디렉션되지 않은 경우와 같은 일반적인 기능이 포함됩니다. 그렇지 않으면 응용 프로그램의 모든 곳에서 사용되는 db의 일부 공통 값을 설정하십시오. 한 번만 쓰고 싶습니다. 각 컨트롤러 메서드에서 메서드를 호출하고 싶지는 않습니다.

감사합니다.

답변

7

그게 무슨 조치 필터입니다. 일부는 이미 AuthorizeAttribute 같은 프레임 워크 구축이 있습니다

 [Authorize(Roles = "Admins")] 
     public ActionResult Index() 
     { 
      return View(); 
     } 

편집 :

필터가 동작, 컨트롤러 또는 글로벌 필터로 설정할 수 있습니다. 이 사용

[Authorize(Roles = "Admins")] 
public class LinkController : Controller 
{ 
    //... 
} 

내부 Global.asax에

protected void Application_Start() 
    { 
     GlobalFilters.Filters.Add(new AuthorizeAttribute { Roles = "Admins" }); 
     //... 
    } 
+0

, 내가 바로, 모든 컨트롤러의 모든 방법에 파일러를 사용하는 것인가? 나는이 단계들을 피하고 싶다. 기본적으로, '컨트롤러'클래스를 MyController로 확장하고 'MyController'를 확장하는 다른 모든 컨트롤러를 만들면 작동합니다. 그것은 좋은 해결책이긴하지만 (나는 전문가의 조언을 구하면서 아직 그것을 시도했다)? – Rana

+3

다음과 같이 컨트롤러 수준에서 이러한 특성을 사용할 수 있습니다. [Authorize] public 클래스 ReportsController : Controller {} 또는 모든 컨트롤러에 대해 Global.asax에 전역으로 등록 : protected void Application_Start() {GlobalFilters.Filters.Add (New AuthorizeAttribute()); ...} – tpeczek

관련 문제