2011-02-07 4 views
2

내가 지금처럼 내 global.ascx 파일에서 actionResult를 호출 오전에 스택 추적 정보를 보내기 메서드를 얻을 수 및 내 페이지에 스택 추적 정보를 표시 할 수 있도록 .... 전체 예외 개체를 따라 전달할 수 있습니까? 이것을 처리하는 가장 좋은 방법은 무엇입니까? 아니면 적절한 스택 추적 정보를 얻을 수있는 방법이 있습니까? 현재 예외 객체에 올바르게 채워진 속성입니다.내가하고 싶은 무엇</p> <pre><code>Response.Redirect(String.Format("~/Error/{0}/?message={1}", action, exception.Message)); </code></pre> <p>는 작업 결과에서 사용할 수있는 모든 예외 개체가입니다 ... 쿼리 문자열

+0

당신의 tempdata에 넣을 수 있습니까? 보통 예외를 기록하고 로그를 사용하여 –

+0

@Phil, 'TempData'를 디버깅하고 예외를 처리하도록 리디렉션합니까? 302 500 대신 상태 코드? 매우 RESTful 또는 SEO 친화적 인 느낌이 들지 않습니다. –

답변

5

리디렉션하는 경우 복잡한 개체를 보낼 수 없습니다. 제 말은 SessionTempData (세션 뒤에서 세션을 사용합니다)을 사용할 수 있다는 것입니다.하지만 추한 것과 내가 추천할만한 것입니다.

복잡한 개체를 원하는 경우 리디렉션하지 않습니다. 훨씬 더 편안하고 및 SEO 친화적 적절한 상태 코드 및 전송을 설정합니다 ErrorController은 다음과 같습니다

protected void Application_Error(object sender, EventArgs e) 
{ 
    Exception exception = Server.GetLastError(); 
    Response.Clear(); 
    Context.ClearError(); 
    var routeData = new RouteData(); 
    routeData.Values["controller"] = "error"; 
    routeData.Values["action"] = "Http500"; 
    routeData.Values["exception"] = exception; 
    IController errorController = new ErrorController(); 
    errorController.Execute(new RequestContext(new HttpContextWrapper(Context), routeData)); 
} 

: 당신은 당신이 복잡한 객체를 보낼 수 없습니다 리디렉션 경우

public class ErrorController : Controller 
{ 
    public ActionResult Http500(Exception exception) 
    { 
     Response.StatusCode = 500; 
     // TODO: do something with the exception like logging it 
     // and render some view explaining the annoyed user 
     // that something very wrong happened to your application 
     // which wasn't your fault of course or something 
    } 
} 

.

+1

감사 ... 완벽한 작품 –

0

이렇게하는 것이 훨씬 더 좋은 방법은 TempData 컬렉션을 사용하는 것입니다.

TempData["myException"] = exception; 

이것은 다음 요청에 대해서만 데이터 저장소 역할을합니다 (현재 클라이언트의 경우). 그러나 컨트롤러 내에서만 액세스 할 수 있으므로 컨트롤러 내에서 오류 처리가 발생하도록 코드를 재구성해야 할 수도 있습니다 (지금은 액세스 할 수없는 샘플 코드가 있지만 넣을 것입니다. 곧이 점이 더 잘 설명 될 것입니다.)

+0

'TempData' 및 예외 처리를 위해 리디렉션 하시겠습니까? 302 500 대신 상태 코드? 매우 RESTful 또는 SEO 친화적 인 느낌이 들지 않습니다. –

+0

내부 응용 프로그램 (내 경우) 인 경우 SEO는 부적합합니다. RESTful은 이상적인 목표입니다. 나는 너의 기술을 그러나 갈 것이다 줄 것이다! –

+0

은 * 인트라넷 응용 프로그램 * 동의어 * 쓰레기 응용 프로그램 *? 내 인트라넷 응용 프로그램이라는 사실이 우리가 웹 표준을 존중해서는 안된다는 의미는 아닙니다. 결국, 그것은 웹 응용 프로그램입니다. 그렇지 않습니까? 따라서 웹 표준과 HTTP 사양을 존중하는 것이 모든 웹 응용 프로그램에서 중요한 부분으로 보입니다. 왜 인트라넷과 인터넷을 구별합니까? –