2010-01-14 3 views
8

내 응용 프로그램에서 사용자 지정 오류가 발생하면 사용자를 전역 적으로 리디렉션해야합니다. 내 사용자 지정 오류를 검색하기 위해 내 logic.asax 파일에 논리를 넣으려고 시도했으나 throw 된 경우 리디렉션을 수행하지만 내 응용 프로그램이 global.asax 메서드를 절대 사용하지 않습니다. 내 예외가 사용자 코드에 의해 처리되지 않았다는 오류 메시지를 계속 제공합니다.사용자 지정 예외가 throw 된 경우 asp.net mvc 리디렉션

여기 내 세계에있는 것이 있습니다.

protected void Application_Error(object sender, EventArgs e) 
{ 
    if (HttpContext.Current != null) 
    { 
     Exception ex = HttpContext.Current.Server.GetLastError(); 
     if (ex is MyCustomException) 
     { 
      // do stuff 
     } 
    } 
} 

다음과 같이 나의 예외가 발생 : 나는 예외를 던지는 파일 내에서 시도 캐치로, 나의함으로써 Application_Error 방법에 도달하지 도착 결코 넣어

if(false) 
    throw new MyCustomException("Test from here"); 

. 누구든지 내가 어떻게 처리 할 수 ​​있는지에 대한 제안을하고있다. (내 사용자 정의 예외 처리)?

감사합니다.

1/15/2010 편집 : 여기에있는 내용은 // 할 일이 있습니다.

RequestContext rc = new RequestContext(filterContext.HttpContext, filterContext.RouteData); 
string url = RouteTable.Routes.GetVirtualPath(rc, new RouteValueDictionary(new { Controller = "Home", action = "Index" })).VirtualPath; 
filterContext.HttpContext.Response.Redirect(url, true); 
+0

+1 Do stuff 비트의 경우 – stuartdotnet

답변

10

컨트롤러/작업에 대한 고객 필터를 만들고 싶습니다. FilterAttributeIExceptionFilter에서 상속해야합니다. 이 같은

뭔가 : 당신이 그것을 만든 후에

public class CustomExceptionFilter : FilterAttribute, IExceptionFilter 
{ 
    public void OnException(ExceptionContext filterContext) 
    { 
     if (filterContext.Exception.GetType() == typeof(MyCustomException)) 
     { 
      //Do stuff 
      //You'll probably want to change the 
      //value of 'filterContext.Result' 
      filterContext.ExceptionHandled = true; 
     } 
    } 
} 

, 당신은 모든 다른 컨트롤러에서 상속합니다 BaseController에 속성을 적용 할 수는 사이트 전체 기능을 확인합니다.

이 두 기사

은 도움이 될 수 :

+0

확인해 보겠습니다. 테스트 용으로 직접 컨트롤러에 추가하고 싶다면 어떻게해야할까요? newbness에 대한 미안 해요 :/ – Kyle

+0

"[CustomExceptionFilter]"특성을 추가하려고했습니다. 컨트롤러 클래스 상단에 예외를 던지고이 필터에 의해 geting으로 표시되지 않습니다. 이전과 같은 오류가 발생하지는 않지만 내 사용자 정의 예외 필터가 발생하지는 않습니다. 나는 또한 내가 예외를 던져야하는 타격하는 actionmethod에 그것을 두는 것을 시도했다. 그리고 그것은 거기에서 일하지 않고있다. .. 어떤 생각? – Kyle

+0

스크래치 내 마지막 코멘트, 내 던지기를 다시 넣어 잊어 버렸습니다. 내가했을 때, 나는 "내 예외는 사용자 코드에 의해 처리되지 않았습니다"전에 같은 오류가 발생합니다. try catch에 필요합니까? – Kyle

0

나는이 대답을 발견 (그리고 질문) Asp.net mvc override OnException in base controller keeps propogating to Application_Error

임 사건 것은 도움이 될 수있는 당신을 누락 된 부분은의 FilterConfig.cs에 맞춤 필터를 추가해야한다는 것입니다.폴더 :

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new CustomExceptionFilter()); 
     filters.Add(new HandleErrorAttribute()); 
    } 
관련 문제