2011-08-03 4 views
0

, 나는 다음과 같은 코드를 가지고 : 나는 페이지에 액세스하려고 할 때catch가 있어도 ASP.NET MVC 3 컨트롤러에서 예외가 발생합니까? 내 ASP.NET MVC 3 응용 프로그램에서

try 
{ 
    return new ProxyResult(new Uri("http://example.org")); 
} 
catch (WebException) 
{ 
} 

그러나, 나는 WebException이을 (404 찾을 수 없음) 수를 ...하지만 WebException이는해야 붙 잡히다. 이것이 내 어획량에서 어떻게 도약 할 수 있는지 이해하지 못합니다.

+3

404는 코드에 도달하기 전에 IIS에 의해 던져 질 것입니다 ... 또는 try 블록 안에 있지 않은 다른 지점에서 ... 해당 줄을 실행 중인지 확인하기 위해 중단 점을 시도한 적이 있습니까? – forsvarir

+0

아니요 ... 내가 WebException을 얻고 있다고 말했듯이. 죽음의 옐로우 스크린. 이것은 FileNotFoundException 및 DirectoryNotFoundException에 대한 catch와 함께 FileResult를 반환 할 때도 발생했습니다. 대신 File.Exists를 사용하도록 코드를 변경 한 다음 작동했습니다. –

답변

2

당신이 당신의 try 블록에두고있는 모든 방법으로 몇 가지 표준 결과가되지 않습니다 ProxyResult에 대한 간단한 생성자 호출이다 => 그것은 아마 뭔가 맞춤. 예상되는 예외를 던질 가능성이있는 결과 (ExecuteResult 호출) 메소드의 실제 실행은 컨트롤러 조치의 훨씬 늦은 바깥에서 발생합니다. 이것이 컨트롤러 액션에서 예외를 던지지 않는 이유입니다. 작성한 사용자 정의 ProxyResult 클래스의 ExecuteResult 메소드 안에 try/catch를 넣어야합니다.

+0

좋은 점은 ProxyResult가 재사용이 가능하다는 것입니다. Controller.File을 사용하여 FileResult를 반환하는 방법을 생각해 봅시다. FileNotFoundExceptions 및 DirectoryNotFoundExceptions를 어떻게 처리할까요? –

+0

@ Jake Petroules, 내 대답에 명시된 바와 같이 사용자 지정 작업 결과의 예외는이 사용자 지정 작업 결과의 재정의 된 ExecuteResult 메서드 내에서 처리되어 적절하게 작동해야합니다. –

+0

다음과 같은 작업을 할 수 있습니다.'var proxy = new ProxyResult (...); proxy.Execute (this.ControllerContext); return 프록시;' ActionResults는 컨트롤러 자체에서 '가정 된'것이 아니라는 것을 알고 있습니다 만 실제로 이것은 어떤 부작용을 일으킬 것입니까? –