2011-01-25 3 views
18

컨트롤러 생성자 내에서 요청을 리디렉션 할 수있는 방법을 알고 싶습니다.MVC - 생성자 내부 리디렉션

예 : 생성자 안에 동적 값을 가진 개체를 초기화해야하는데 어떤 경우에는 수행하지 않으려 고하고 다른 위치로 리디렉션하고 싶습니다. 같은 방법으로 나머지 생성자는 "원래의 다음 동작"도 실행되지 않습니다.

어떻게하면됩니까? 는

편집 # 1

가 처음에 내가 사용 감사 :

public override void OnActionExecuting(ActionExecutingContext filterContext) 

내가 다른 컨트롤러/액션/URL로 리디렉션 할 수 있지만 나중에, 나는 변경하는 데 필요한 내 컨트롤러에서 생성자의 변수를 초기화하고 요청을 리디렉션해야하는 코드가 있습니다. P

OnActionExecuting이 컨트롤러 생성자. 그리고 내 논리에서 리디렉션이 필요합니다.

답변

45

컨텍스트가 초기화되지 않았기 때문에 컨트롤러 생성자 내부에서 리디렉션을 수행하는 것은 좋지 않습니다. 표준 실행은 사용자 지정 작업 특성을 작성하고 OnActionExecuting 메서드를 재정의하고 내부로 리디렉션을 수행하는 것입니다. 예 :

public class RedirectingActionAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     base.OnActionExecuting(filterContext); 

     if (someConditionIsMet) 
     { 
      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new 
      { 
       controller = "someOther", 
       action = "someAction" 
      })); 
     } 
    } 
} 

다음으로이 속성으로 리디렉션하려는 컨트롤러를 꾸미십시오. 이 속성으로 리디렉션 할 컨트롤러를 꾸미지 않으려면 극도로주의해야합니다. 그렇지 않으면 무한 루프가 발생합니다.

그래서 당신은 할 수 :

[RedirectingAction] 
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     // This action is never going to execute if the 
     // redirecting condition is met 
     return View(); 
    } 
} 

public class SomeOtherController : Controller 
{ 
    public ActionResult SomeAction() 
    { 
     return View(); 
    } 
} 
+0

당신은 : 그것에 나를 이길. – bastijn

+0

힌트를 주셔서 감사합니다. 그러나 그것은 제가 전에 사용했던 것입니다. EDIT # 1 – Dryadwoods

+0

@emanyalpsid를 확인한 다음,이 방법을 사용하도록하십시오. 컨텍스트가 아직 초기화되지 않았기 때문에 컨트롤러 생성자 내부로 리디렉션 할 수 없습니다. 당신은 아마'Initialize' 메쏘드 안에서 이것을 할 수 있습니다 만, IMHO라면 이것을 할 필요가 있다면 뭔가 잘못하고있는 것입니다. –

관련 문제