2011-10-05 6 views
1

모든 것을 포획하고 MessageBox.Show (ex.message)를 사용하여 사용자에게 메시지로 오류를 처리하거나 그냥 기록한 Winforms 세계에서 왔습니다. 이제 웹 (MVC 3) 세계에 있는데 적절한 오류 처리 방법을 사용하는 방법에 대한 명확한 코드 예제를 찾을 수없는 것 같습니다.MVC 3 오류 처리의 적절한 코딩 예제

사용자의 클릭을 컨트롤러 액션 실행 링크 :

Function SelectAlertKPIs() As ActionResult 

    Try 
     Return PartialView() 

    Catch ex As Exception 
     TempData("ErrorMessage") = "There was a problem during page load: " & ex.Message & vbCrLf & vbCrLf & ex.StackTrace 
     Return RedirectToAction("HttpError", "Error") 
    End Try 

End Function 

이보기는 AJAX 바인딩 함께 Telerik 그리드로드를, 이제 바인딩 실행을이 작업을 제가 사용하고 무엇을 보여주지 :

Public Shared Function All() As IList(Of AlertKPI) 

    Dim l As IList(Of AlertKPI) = Nothing 

    Try 
     Using dc As New AdminAlertKPIDataContext(TripleDESSecurity.Decrypt(SharedData.PortalCnx)) 
      l = (From d In dc.AdminAlertKPIs Order By d.ID Select New AlertKPI With { 
       .ID = d.ID, 
       .KPI = d.KPI, 
       .KPIName = d.KPIName, 
       .KPIDescription = d.KPIDescription 
      }).ToList 
     End Using 

     Return l 

    Catch ex As Exception 
     Throw 
    Finally 
     If Not l Is Nothing Then l = Nothing 
    End Try 

End Function 

이 내 잘못입니다 : 데이터를 얻기 위해이 메소드를 호출

<GridAction()> _ 
Function _SelectAlertKPIs() As ActionResult 

    Try 
     Return PartialView(New GridModel(AlertKPIRepository.All())) 

    Catch ex As Exception 
     TempData("ErrorMessage") = "There was a problem during page load: " & ex.Message & vbCrLf & vbCrLf & ex.StackTrace 
     Return RedirectToAction("HttpError", "Error") 
    End Try 

End Function 

orController 행동 : 나는 의도적으로 던져 내 컨트롤러 액션에 코드를 추가 할 경우 지금

<customErrors mode="On" defaultRedirect="/Error/HttpError"> 
    <error statusCode="404" redirect="/Error/Http404" /> 
</customErrors> 

:

Public Function HttpError() As ActionResult 

    Dim s As String = String.Empty 

    s = TempData("ErrorMessage") 
    ViewData("ErrorMessage") = "An error occurred. " & s 

    Return PartialView("Error") 

End Function 

Public Function Http404() As ActionResult 

    Try 
     ViewData("ErrorMessage") = "The page you requested could not be found" 

     Return View("Error") 

    Catch ex As Exception 
     Return View("Error") 
    End Try 

End Function 

이것은 내가 내 Web.config의에서이 무엇

Throw New HttpUnhandledException 

그런 다음 그것을 catch 블록으로 떨어지고 HttpError 액션으로 라우팅됩니다. Twice! 그리고 내 Error.aspx 뷰가 열리지 않는다. 대신 JSON 결과가 없거나 500 내부 서버 오류가 발생한다. 나에게 의미가 없다. 기본적으로, 나는 내가하는 일을 모른다.

그리고 정말 좋은 지침을 사용할 수 있습니다 ....

당신은 [HandleErrorAttribute]으로 볼 필요가

답변

0

- 시도의 catch 블록을 사용하여 액션 메소드를 polute 할 필요가 없다. 추가 로깅을위한 자체 오류 처리기 특성을 구현할 수도 있습니다. 이것은 현재 내가하고있는 일입니다. 이것은 예외 처리에 대한 오늘의 게시물입니다 : click here

웹 구성은 MVC 응용 프로그램 파이프 라인 외부에서 발생하는 예외에 대한 것입니다. IIS는 웹 구성을 읽고 사용자를 올바른 페이지로 리디렉션 할 수 있습니다. 다른 사람, 제발 내가 틀렸을 때 정정 해주세요.

+0

실제 코드 샘플을 제공 할 수 있습니까? 많은 사람들이 '이것들을 들여다 보거나 그 안에있다'고 합니다만, 각각의 안에 올바른 방법이 무엇인지에 관해서는 너무 많은 소음이 있습니다. 내가 제공 한 코드에 연결하기위한 실제 예를 찾고 있습니다. 나는 또한 당신이 왜 try/catch에서 벗어나라고 말하는지 이해하지 못합니다. 이것은 오염이 아니며, 내가 배운 것에서부터 순수한 안전입니다. Try/Catch를 사용하지 않는 것은 항상 내 세계에서 끔찍한 일이었습니다. 그래서 필자는 왜 내가 그 패러다임에서 벗어나야하는지에 대해 앞장서 서 감당할 수 없다. –