2013-01-11 3 views
0

누군가 나에게이 상황을 명확히 수 :MVC 파이프 라인은 어떻게 작동합니까?

  1. 우리는 예를 들어 홈 \ 지수에 대한 요청을을; 글로벌 asax에서
  2. 우리는이 Application_AuthorizeRequest
  3. Application_AuthorizeRequest 던져 예외
  4. 우리는 그것을 잡아) (

    IController 컨트롤러 = 새로운 ErrorController 새로운보기를 반환함으로써 Application_Error있다; // routedata는 ok입니다 controller.Execute (새 RequestContext (새 HttpContextWrapper (Context), routeData)); 오류와

  5. 조치 (그것의 OK)

  6. 실행하지만 MVC 또는 ASP 파이프 라인은 아직도 내가 파이프 라인이 요청에 대해 잊을 수있는 방법을, 홈 \ 인덱스를 실행하려고?

멀리 mvc HttpHandler 이해, 어떻게 내 오류 작업이 모든 체인의 마지막 단계인지 확인할 수 있습니까?

답변

1

이 설정에는 문제가 있습니다. 당신이 사용자 권한 부여를 작성해야 호출되는 색인 작업을 방지하려면 대신 Authenticate_Request 이벤트 사용하는 속성 :

public class MyAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     // perform the logic you were doing in your Authenticate_Request 
     // here to authorize the user. You could throw exceptions as well 
     throw new Exception("ok"); 
    } 
} 

인증 필터는 ASP.NET MVC 애플리케이션에 Authenticate_Request 방법을 대체하고 그게 당신이해야 무엇 사용. 그것이 있어야 정확하게,

public class HomeController: Controller 
{ 
    [MyAuthorize] 
    public ActionResult Index() 
    { 
     ...  
    } 
} 

지금 당신함으로써 Application_Error가 호출된다 오류 컨트롤러 실행과 색인 작업은 결코 트리거되지 :

다음은이 속성을 사용하여 색인 작업을 장식합니다.

관련 문제