2011-05-04 3 views
4

명시 적으로 처리되지 않은 HTTP 오류 코드를 처리하기 위해 특정 컨트롤러를 통해 사용자 지정 오류 페이지로 리디렉션을 시도했습니다.MVC 3, defaultRedirect 및 HandleErrorInfo 모델

public class ErrorsController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

생각 나는 이상, 결국 처리하고 여기에 사용자 지정 오류 정보를 표시 할 수있는과 :

, 나는이
<customErrors mode="On" defaultRedirect="errors" /> 

그리고 내 컨트롤러에 대한 설정

다음 한이 작업을 용이하게하기 위해 Error.cshtml이 표시하는 것 이상.

내 문제는 주변의 오류 정보를 얻고있다 ...

사람이 어떻게 생성하는 방법을 알고 있나요 ... 내가 찾을 수있는 HandleErrorInfo 인스턴스가없는,도 Service.GetLastError()는 아무 것도 반환하지 또는 HandleErrorInfo 객체를 가져 옵니까? - 이것을 사용하고 나머지 오류 처리에 적합하도록 어떻게 든 채우고 싶습니다.

감사합니다,
Kieron

답변

3

컨트롤러 (또는 특정 활동)으로는 handleError 속성을 추가

[HandleError] 
public class HomeController 

그런 다음 다른 오류를 기반으로 리디렉션 동작을 제어하기 위해 Web.config의에서 이것을 사용 :

<system.web> 
    <customErrors mode="On" defaultRedirect="Error.aspx"> 
    <error statusCode="403" redirect="NoAccess.htm"/> 
    <error statusCode="404" redirect="FileNotFound.htm"/> 
    </customErrors> 
</system.web> 

사용자 지정/컨트롤러/동작을 사용하도록 리디렉션을 조정할 수 있습니다. 잘하면 HandleErrorInfo를 게시해야하지만 결코 시도하지 마십시오.

+0

흥미 롭습니다 - 이미 (기본) 컨트롤러에 HandleError 속성이 있습니다. 아직도 기쁨이 없습니다. – Kieron

+0

기본 리디렉션은 "~ Views \ Shared \ Error.aspx"로 직접 이동하며 사용자가 제어하는 ​​컨트롤러를 통하는 것은 아닙니다. Error.aspx에는 사용할 HandleErrorInfo 모델이 있습니다. 이것은 면도기 엔진으로 Error.cshtml 또는 Error.vbhtml이됩니다. –

+0

Controller 액션으로 리디렉션 할 수 없다고 생각합니다. 선택적으로 HandleErrorInfo 모델을 사용하여 예외 및 호출 스택을 표시하는 것보다 나은 방식으로 사용자에게 오류를 표시하는 페이지로만 리디렉션 할 수 있습니다. –

2

면도기를 사용하는 경우 컨트롤러 상단에 [HandleError]를 넣습니다. Error.cshtml이라는 오류 페이지를 공유 폴더에 넣으십시오.
customErrors에 모드를 상관 사용되지 않습니다 위의 명세서에 재

"에"= 다음과 같이

당신의 Web.config의 설정은 다음이어야한다.

그건 그렇습니다. 처리되지 않은 예외에는 오류 페이지가 표시됩니다. 디버그 모드에서이를 테스트하려면 customErrors mode = "On"이 기본 web.config에 설정되어 있는지 확인하십시오.