2011-09-01 2 views
10

내가 MVC InvalidOperationException이

<customErrors mode="On" defaultRedirect="~/Home/Error"> 
    <error statusCode="404" redirect="~/Home/PageNotFound" /> 
</customErrors> 

내가이 발생 페이지와 예외를 만들어 내가 올바른 오류 페이지로 리디렉션 사용하여 사용자 정의 오류 페이지 설정을 가지고있다.

내가 생산 웹 서버에 ELMAH에서 이러한 오류를 나타 납니까 그러나 :

뷰 '오류'또는 마스터가 찾을 수 없습니다

System.InvalidOperationException 또는 전혀 뷰 엔진은 검색 위치를 지원합니다. 다음 위치가 검색되었습니다 : ~/지역/축구/조회/초안/Error.aspx로 ~/지역/축구/조회/초안/Error.ascx ~/지역/축구/조회/공유/Error.aspx로 ~/지역/축구 /보기/공유/Error.ascx ~/Views/Draft/Error.aspx ~/Views/Draft/Error.ascx ~/Views/Shared/Error.aspx ~/Views/Shared/Error. ascx ~/지역/축구 /보기/초안/Error.cshtml ~/지역/축구 /보기/초안/오류 .vbhtml ~/지역/축구 /보기/공유/Error.cshtml ~/Areas/Football/Views ~ /Shared/Error.vbhtml ~/Views/Draft/Error.cshtml ~/Views/Draft/Error.vbhtml ~/Views/Shared/Error.cshtml ~/Views/Shared/Error.vbhtml

왜 다른 페이지에서 오류 페이지를 찾으십니까? ~/Views/Shared/Error.cshtml을 삭제하고 ~/Home/Error에 내 사용자 정의 오류 페이지를 추가했습니다. 설정 파일에서 새 기본값을 지정했기 때문입니다.

아이디어가 있으십니까?

감사합니다. 기본적으로

+0

을'customErrors'은 (하지 ASP와 뭔가 ASP.NET 거래입니다 .NET MVC),이 도구는 그 작업을위한 최상의 도구는 아닙니다. 리차드 딩 월 (Richard Dingwall)은 다음과 같은 훌륭한 게시물을 가지고 있습니다. http://richarddingwall.name/2008/08/17/strategies-for-resource-based-404-errors-in-aspnet-mvc/ –

답변

26

MVC 프로젝트는 처리되지 않은 예외가 발생하면이 필터가 실행되는 Global.asax.cs 파일

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
    } 

HandleErrorAttribute을 추가합니다. 보기를 Error으로 설정합니다. 따라서 MVC 런타임은 해당 뷰를 렌더링하려고합니다. 그러나 귀하의 경우에는 그러한 견해가 없습니다. 따라서 ASP.NET 런타임에서 처리하는 또 다른 예외를 다시 throw하고 Web.Config 파일에 구성한 오류 페이지를 표시합니다.

고유의 예외 필터를 만들어 등록 할 수 있습니다.

+0

감사합니다. 정확히 무슨 일이 일어나고 있는지. 기본 오류보기를 다시 배치하고 예외가 발생했습니다. 오류에 대한 기본보기가 사라진 것을 알 수 없습니다. 그러나 elmah는 예외를 기록하지 않습니다. 나는 기본보기를 사용하는 것이 좋지만 elmah가 오류를 기록하지 않는 이유는 무엇입니까? 404 로그를 정상적으로 기록하지만 서버 500 오류는 기록하지 않습니다. –

+2

@Aros - Elmah를위한 HandleErrorAttribute의 특수 버전을 구현해야합니다. 여기에서 예제를 찾을 수 있습니다. http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx –

+0

감사합니다. 이제 답을 주석으로 처리하고 web.config에서 리디렉션하는 사용자 지정 오류에 의존합니다. 문제가 발생하면 여기에서 답을 사용하겠습니다. http://stackoverflow.com/questions/766610/how-to-get-elmah-to-work-with-asp-net-mvc-handleerror-attribute/779961#779961 누구나 내가 왜 코멘트하고 싶지 않는지 안다. 그 줄의 코드 는요? –

5

섹션을 사용하여 Global.asax에서 HandleErrorAttribute의 등록을 종료했습니다. 이제 ELMAH는 오류를 올바르게 기록하고 사용자 정의 오류 페이지를 지정할 수 있습니다.

나는 뭔가를 놓친가요?

+0

나를 위해 일하는 것 같다, 약간 긴장하게하지만 그걸로 아무것도 잘못 볼 수 없습니다. – andrewb

+0

Elmah 대신 StackExchange.Exceptional에서 사용자 정의 오류를 사용하여 나를 위해 일했습니다. – Gareth

0

이 게시물의 향후 독자를 위해 Elmah는 자체 HandleErrorAttribute을 추가하므로 Error.cshtml 뷰도 예상됩니다. Elmah.MVC NuGet 패키지도 설치했음을 유의하십시오. 그러나 이는 올바르게 설정하는 데 사용됩니다.

예, 그냥 Elmah.MVC이 HandleErrorAttribute를 추가하기위한 책임이 있다는 nuget.org에 발견 : ELMAH 기능의

고통 통합 ASP.NET MVC 응용 프로그램에. ASP 안에 패키지를 놓기 만하면됩니다.NET MVC 응용 프로그램 및 access/elmah URL 또한 전역 HandleError 필터 인 을 설치하여 처리되지 않은 모든 오류가 기록되도록합니다 (customError 이 "On"으로 설정된 경우에도).

1

당신은 또한 HandleErrorAttributeRemove 방법을 사용하여 전역 필터에서 제거에 등록되지 않았는지 확인 할 수 있기 때문에

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Remove(new HandleErrorAttribute()); 
     /* ... your other filters */ 
    } 
} 
관련 문제