Unity는 ASP.NET 응용 프로그램에서 오류 응답을 사용자 지정하는 데 적합하지 않습니다. 그것은 Dependency Injection 컨테이너이고 모든 필요한 종속성을 가진 컨트롤러를 인스턴스화하기를 원할 것입니다. 애플리케이션 로직과 섞어 놓는 것은 좋지 않습니다 (오류 응답을 맞춤 설정하는 것이 확실합니다).
ASP.NET MVC 및 ASP.NET 웹 API는 필요한 항목 (예 : 예외 필터)에 적합한 확장 지점을 제공합니다. ASP.NET 웹 API 샘플은 다음과 같습니다.
public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
// Add your exception handling here
// Check context.Exception and decide whether you need to handle it
if (context.Exception is SqlException)
{
var controllerType = context.ActionContext.ControllerContext.Controller.GetType();
if (controllerType == typeof(UserController))
{
context.Response = new HttpResponseMessage(HttpStatusCode.Conflict)
{
Content = new StringContent("User already exists")
};
}
else
{
// Cover other controller types here
}
}
}
}
위와 같이 구현이 간단합니다. OnException()
메서드 안에 컨트롤러 및 액션 컨텍스트가있는 예외 자체에 액세스 할 수 있습니다. 논리에서이 컨트롤러 예외에 대해이 예외를 처리해야하는 경우 context.Response
을 적절하게 HttpResponseMessage
으로 채우고 HTTP 상태 코드와 본문을 선택하면됩니다.
당신은 당신의 WebApiConfig.Register(HttpConfiguration config)
또는 컨트롤러 수준에
GlobalConfiguration.Configuration.Filters.Add(new CustomExceptionFilterAttribute());
와 함께 전 세계적으로 이러한 예외 필터를 적용 할 수 있습니다
[CustomExceptionFilter]
public class UserController : ApiController
구현 ASP.NET MVC 매우 유사합니다. 이 경우 필터에 System.Web.Mvc.IExceptionFilter
을 구현해야합니다.