MVC 프레임 워크-예외 처리

ASP.NET에서 오류 처리는 표준 try catch 접근 방식 또는 응용 프로그램 이벤트를 사용하여 수행됩니다. ASP.NET MVC는 예외 필터라는 기능을 사용하여 예외 처리를 기본적으로 지원합니다. 여기서는 두 가지 접근 방식을 배울 것입니다. 하나는 onException 메서드를 재정의하는 것이고 다른 하나는 HandleError 필터를 정의하는 것입니다.

OnException 메서드 재정의

이 접근 방식은 컨트롤러 수준에서 Action 메서드의 모든 예외를 처리하려는 경우에 사용됩니다.

이 접근 방식을 이해하려면 MVC 응용 프로그램을 만듭니다 (이전 장에서 다룬 단계를 따릅니다). 이제 새 Controller 클래스를 추가하고 onException 메서드를 재정의하고 Action 메서드에서 명시 적으로 오류를 발생시키는 다음 코드를 추가합니다.

이제 다음과 같은 공통 뷰를 생성하겠습니다. Error애플리케이션에서 예외가 발생하면 사용자에게 표시됩니다. Views 폴더 안에 Shared라는 새 폴더를 만들고 Error라는 새보기를 추가합니다.

새로 생성 된 Error.cshtml 내부에 다음 코드를 복사합니다.

지금 응용 프로그램을 실행하면 다음과 같은 결과가 나타납니다. 위의 코드는이 컨트롤러 내의 작업 메서드에서 예외가 발생할 때 오류보기를 렌더링합니다.

이 접근 방식의 장점은 동일한 컨트롤러 내의 여러 작업이이 오류 처리 논리를 공유 할 수 있다는 것입니다. 그러나 단점은 여러 컨트롤러에서 동일한 오류 처리 논리를 사용할 수 없다는 것입니다.

HandleError 속성

HandleError 속성은 필터 및 작업 필터 장에서 연구 한 작업 필터 중 하나입니다. HandleErrorAttribute는 IExceptionFilter의 기본 구현입니다. 이 필터는 컨트롤러 작업, 필터 및보기에서 발생하는 모든 예외를 처리합니다.

이 기능을 사용하려면 먼저 web.config에서 customErrors 섹션을 켜십시오. web.config를 열고 system.web에 다음 코드를 넣고 해당 값을 On으로 설정합니다.

<customErrors mode = "On"/>

이미보기 아래의 공유 폴더에 오류보기가 생성되어 있습니다. 이번에는이 View 파일의 코드를 다음과 같이 변경하여 HandleErrorInfo 모델 (System.Web.MVC 아래에 있음)로 강력하게 입력합니다.

@model System.Web.Mvc.HandleErrorInfo 

@{ 
Layout = null; 
} 
  
<!DOCTYPE html> 
<html> 
   <head> 
      <meta name = "viewport" content = "width = device-width" /> 
      <title>Error</title> 
   </head> 
   
   <body> 
      <h2> 
         Sorry, an error occurred while processing your request.  
      </h2> 
      <h2>Exception details</h2> 
      
      <p> 
         Controller: @Model.ControllerName <br> 
         Action: @Model.ActionName 
         Exception: @Model.Exception 
      </p> 
   
   </body> 
</html>

이제 컨트롤러 파일에서 [HandleError] 속성을 지정하는 다음 코드를 컨트롤러 파일에 배치합니다.

using System; 
using System.Data.Common; 
using System.Web.Mvc;  

namespace ExceptionHandlingMVC.Controllers { 
   [HandleError] 
   public class ExceptionHandlingController : Controller { 
      
      public ActionResult TestMethod() { 
         throw new Exception("Test Exception"); 
         return View(); 
      } 
   } 
}

지금 응용 프로그램을 실행하려고하면 다음 스크린 샷과 유사한 오류가 표시됩니다.

보시다시피 이번 오류에는 컨트롤러 및 작업 관련 세부 정보에 대한 자세한 정보가 포함되어 있습니다. 이러한 방식으로 HandleError는 모든 수준과 컨트롤러에서 이러한 오류를 처리하는 데 사용할 수 있습니다.