2009-08-26 2 views
7

내 ASP.NET MVC 응용 프로그램은 곧 완전히 교체 될 더 큰 ColdFusion 응용 프로그램의 작은 부분입니다. ColdFusion에서 제공하는 일부 매개 변수를 쿠키를 통해 전달하므로 모든 작업을 실행하기 전에이 정보를 확인해야합니다. 정보가 누락 된 경우 상위 사이트로 리디렉션해야합니다. 이 기능을 배치하는 가장 좋은 장소는 무엇이며이를 일관되게 호출하는 방법은 무엇입니까?ASP.NET MVC의 기본 컨트롤러에서 일반 코드를 연결하는 방법

현재 기본 컨트롤러를 구현했으며 모든 작업 메서드에서 기본 컨트롤러에서 메서드를 호출하고 반환 결과에 따라 작업을 리디렉션하거나 작업을 계속합니다. 이 접근법은 효과가있는 것처럼 보이지만 행동과 직접적으로 관련이없는 consunt로 내 행동 방식을 혼란시킵니다. 어떻게 분리 할 수 ​​있습니까? 내가 사용할 수있는 컨트롤러의 수명주기 이벤트가 있습니까? 이 특정 컨트롤러 내에서 모든 행동에 필요한 경우

답변

6

:이 모든 작업을 수행 할 것이기 때문에

public class YourBaseController : Controller 
{ 
    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     base.OnActionExecuting(filterContext); 

     if(somethingIsWrong) 
     { 
      filterContext.Result = new RedirectToRouteResult(
       new System.Web.Routing.RouteValueDictionary { ... }); 
     } 
    } 
} 
2

, 당신은 아마 사용할 수있는 하나의 잠재적 인 옵션은

public class MyBaseController: Controller 
{ 
    protected override void Initialize(RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 

     var cookie = base.Request.Cookies["coldfusioncookie"]; 
     //if something is wrong with cookie 
      Response.Redirect("http://mycoldfusionapp"); 
    } 
} 
2

더 나은 접근 방법은하는 것입니다 ... 기본 컨트롤러에서이 작업을 수행 단지이다 사용자 정의 ActionFilterAttribute을 구현하고 로직을 처리하기 위해 OnActionExecuting 메소드를 대체 한 다음 속성으로 조치를 장식하십시오.

public class CheckCookieAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // Check your cookie and handle the redirect here, otherwise, do nothing 
     // You can get to your cookie through the filterContext parameter 
    } 
} 

public class ActionController : Controller 
{ 
    [CheckCookie] 
    public ActionResult GetFoo() 
    { 
     return View(); 
    } 
} 

희망 사항. 이미 기본 컨트롤러가 바로 그 OnActionExecuting() 메소드를 오버라이드 (override) 구현 경우

+1

커트의 대답은 더 논리적 인 것 같다. 특정 행동 일 뿐인 경우 귀하의 접근 방식이 더 좋을 것입니다. – Martin

+0

걱정 마틴. 당신이 모든 행동에 그것을 필요로한다면, 나는 eu-ge-ne이 대답 한 것을 제안 할 것입니다. 나도 그랬지만 그때 그의 대답을 보았다. –

관련 문제