2014-04-24 4 views
0

나는 다음과 같은 코드에 구현 된 사용자 지정 오류 처리기를 가지고 : 왜 사용자 정의 오류 처리가 작동하지 않습니까?

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) 
    'get the exception 
    Dim ex = Server.GetLastError() 

    'log it 
    ex.LogToFile() 

    'clear the error 
    Server.ClearError() 

    'build route data to route this exception to ErrorController 
    Dim routeData = New RouteData() 
    routeData.Values.Add("controller", "Error") 
    routeData.Values.Add("action", "Index") 
    routeData.Values.Add("exception", ex) 

    'route to the error controller, preserving the context 
    Dim controller As IController = New Controllers.ErrorController() 
    controller.Execute(New RequestContext(New HttpContextWrapper(Context), routeData)) 
End Sub 

그런 다음 /error/index 액션 메소드는 사용자 친화적 인 방법으로 예외를 보여줍니다. 내 개발 컴퓨터에서이 잘 작동합니다. 하지만 배포 된 서버에서 예외가 발생하면 내 오류 메시지 대신에 %SystemDrive%\inetpub\custerr\<LANGUAGE-TAG>\500.htm과 같이 미리 준비된 오류 페이지를 사용하려고합니다.

내 자신의 500 페이지를 지정하면 그것을 사용하지만 사용자 정의 처리는 사용하지 않습니다.

나는과 같이 500 페이지를 제거하는 경우 :

<httpErrors> 
    <remove statusCode="500" subStatusCode="-1" /> 
    </httpErrors> 
난 그냥이 메시지와 함께 죽음의 흰색 화면을 얻을

: 그래서

The page cannot be displayed because an internal server error has occurred. 

, 어떻게 내 오류가 어떻게 처리 얻을 수 있습니다 옳은 일?

답변

0

HandleErrorAttribute이이 문제를 일으키는 것 같습니다. Global.asax 및 App_Start/FilterConfig.vb를 검사하여 filters.Add(New HandleErrorAttribute())과 같은 줄이 있는지 확인하십시오.

HandleErrorAttribute이 사용되고 사용자 지정 오류가 켜져 있으면 MVC는 처리되지 않은 모든 예외를 MVC 워크 플로에 보관합니다. 보기/컨트롤러/etc의 처리되지 않은 예외가 ASP.NET 또는 IIS에서 버블 링되지 않아서 Application_Error에서 예외를 볼 수 있음을 알면 /Views/Shared/Errors.vbhtml에서보기가 표시됩니다.

귀하의 코드에서 거의 HandleErrorAttribute의 기능을 수행하고 있습니다. 단순히 실패에 대한 간단한보기를 반환하려는 경우 특성을 사용하면 일반 오류보기 대신 사용하는 기본보기를 설정할 수 있습니다.

관련 문제