오류를 처리와 ErrorController 보다 직접적인 보기
-
10-07-2019 - |
문제
나는 내 주위에서의 오류 처리 MVC.내가 무엇을 찾고 있는 중앙에서 관리하는 방법을 잡을 오류 로그에 그들에게 가능한 경우 해결하는 경우,nessecary 다른 작업을 수행하고 마지막으로 보여 올바른 사용자.
나는 생각한 사용할 수 있[HandleError]필터링 이를 위해,하지만 보이지 않는 어떤 방법을팅 컨트롤러/작업입니다.옵션만 나는 가리키는 그에게 직접습니다.
해결책
handle -errorattribute MVC와 함께 제공되는 것은 매우 기본적인 IExceptionFilter입니다.
당신은 내가 원하는 것을 달성 할 수있는 몇 가지 옵션이 있습니다.
액션/컨트롤러에서 [handleError (type = typeof (myExcept), View = "ErrorView")]를 사용할 수 있습니다.
handle -errorattribute 그다지 복잡하지 않습니다. MS는이 코드를 복사하고 요구 사항에 맞게 수정하는 것이 좋습니다.
OneXception Override를 사용하면 ExceptionContext를 통해 필요한 모든 정보 (컨트롤러, 작업, 경로 데이터 등)에 액세스 할 수 있습니다.
예외 처리를 설정해야합니다. 그런 다음 ErrorController 및 조치로 리디렉션되는 새로운 REDIRECTTOACTION 인스턴스로 FILTERCONTEXT.RESULT를 설정할 수 있습니다. 분명히 속성으로 특정 컨트롤러 및 작업을 노출시킬 수 있습니다.
다른 팁
Leppi, i는 작업 결과로 보내려면 작업 및 컨트롤러를 정의하여 오류를 리디렉션 할 수 있습니다. 좋은 예이지만 개인적인 나는 사용하지 않는 것을 좋아하지 않는다
여기 내 extenptionfilter의 예입니다. 내 기본 컨트롤러에는 제어되지 않은 오류를 모두 처리 할 수있는 기본 IExceptionFilter가 있습니다.
[SuppressMessage("Microsoft.Performance", "CA1813:AvoidUnsealedAttributes",
Justification = "This attribute is AllowMultiple = true and users might want to override behavior.")]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class GenericExceptionHandlerFilter : ActionFilterAttribute, IExceptionFilter
{
public Type ExceptionType { get; set;}
public string RedirectToAction { get; set;}
public string RedirectToController { get; set;}
protected bool ApplyFilter(ExceptionContext filterContext)
{
Type lExceptionType = filterContext.Exception.GetType();
return (ExceptionType == null ||
lExceptionType.Equals(ExceptionType));
}
#region IExceptionFilter Members
public void OnException(ExceptionContext filterContext)
{
if (ApplyFilter(filterContext))
{
IbfControllerLogger.Log(filterContext.Exception);
filterContext.ExceptionHandled = true;
#region Calculate Action Controller Error
RouteValueDictionary lRoutes = new RouteValueDictionary(new
{
action = RedirectToAction,
controller = String.IsNullOrEmpty(RedirectToController) ? (string)filterContext.RouteData.Values["controller"] : RedirectToController
});
UrlReWriterUtils.UrlReWriter(filterContext.Controller.ViewData, lRoutes);
#endregion
filterContext.Controller.TempData[TempDataName.C_TEMPDATA_EXCEPTIONERROR] = filterContext.Exception;
filterContext.Result = new RedirectToRouteResult(lRoutes);
}
}
#endregion
ActionResult에서 파생 된 자신만의 ErrorResult를 만들어 보지 않겠습니까?
내가 무슨 일(지 않을 수도 있습니다 또는 좋은 연습)이:
오류가 발생한 경우:
- 는 경우 이메일 주소와 비밀번호 처리할 수 있습니다,나는(그것은 로깅으로 를)
- 는 경우 이메일 주소와 비밀번호하고 처리할 수 없습니다,나는 그것은 로그를 를 반환 ViewResult 는 오류페이지
- 에 대한 설명을 포함,오류 표준에 메시지와 연결되는 링크를 다시 무엇을 하고 있었다
- 지 않은 경우에 그것을 기대,내정 OnError 서 기반 컨트롤러 클래스가 이전 단계
- 다른 모든는 오류를 처리할 수 없습은 자동으로 로그온하여 를 요청 yellowscreens
대부분의 일반적인 오류 처리에 대한 기본 클래스 내 모든 컨트롤러입니다.이는 해결책을 찾기 위해 노력하겠습니다 설정하고 컨트롤러 행동에 값을 기본 클래스를 생성할 수 있습 ActionLink 리디렉션에 오류 메시지가 나타납니다.