문제

나는 내 주위에서의 오류 처리 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 리디렉션에 오류 메시지가 나타납니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top