2015-09-17 3 views
1

Я пытаюсь переопределить OnException в Global.asax для обработки журнала ошибок и записи. Я не уверен, какая часть ошибки, я продолжаю получать ошибку «MyApp.MvcApplication.OnException (System.Web.Mvc.ExceptionContext)»: никакой подходящий метод не найден, чтобы переопределить «всякий раз, когда я перестраиваю свое решение.MVC Override OnException Ошибка: Не найдено подходящего метода для переопределения

это код, который я имею в Application_Start()

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     WebApiConfig.Register(GlobalConfiguration.Configuration); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     AuthConfig.RegisterAuth();   
    } 

И это код, который я имею в OnException()

protected override void OnException(ExceptionContext context) 
    { 
     Exception ex = context.Exception; 

     if (!string.IsNullOrEmpty(ex.Message) || 
      !string.IsNullOrEmpty(ex.Source.ToString()) || 
      !string.IsNullOrEmpty(ex.StackTrace)) 
     {     

      WriteLog(ex.Message.ToString(), ex.StackTrace.ToString(), ex.Source.ToString(), "0"); 

      context.Result = new ViewResult 
      { 
       ViewName = String.Format("~/ErrorPage/ErrorPage?message={0}&stack={1}&source={2}", HttpUtility.UrlEncode(ex.Message), HttpUtility.UrlEncode(ex.StackTrace), HttpUtility.UrlEncode(ex.Source)) 
      }; 
     } 

     context.ExceptionHandled = true; 
    } 

Функция WriteLog() тестируется работает в другом приложении , Я не думаю, что в этом есть проблема, и я даже пытался:

protected override void OnException(ExceptionContext context) { 
    Exception ex = context.Exception; 

    context.Result = new ViewResult 
      { 
       ViewName = "~/Shared/Error.cshtml"; 
      }; 
    context.ExceptionHandled = true; 
} 

Но ничего не работает. Ошибка остается там.

Как может возникнуть такая проблема и как ее исправить? Я прочитал много учебников об этом, я не думаю, что неправильно написано OnException().

Пожалуйста, помогите. Благодаря

ответ

2

Существует не любой OnException внутри Global.asax

у вас есть два пути:

Создать свой собственный HandleErrorAttribute и регистрации в FilterConfig.cs

public class HandleExceptionsAttribute : HandleErrorAttribute 
{ 
    public override void OnException(ExceptionContext filterContext) 
    { 
     (...) 
    } 
} 

FilterConfig.cs:

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleExceptionsAttribute()); 
    (...) 
} 

Или, если у Вас есть BaseController, где все контроллеры унаследованный от, переопределить метод OnException.

PS: Я бы выбрал фильтр.

+0

После стольких дней чтения и борьбы я не нашел никаких ресурсов, рассказывающих мне, что OnException не существует в Global.asax, часть его, конечно же, слабая основа в ООП. Очень благодарен за эту полезную информацию, теперь ошибки больше нет, и я могу переопределить OnException для своих вещей. –

+0

Я рад, что помог :) –

0

Там нет способа OnException в глобальной asax, что метод принадлежит controllers.to обработки ошибок в глобальной asax использовать метод Application_Error (объект отправителя, EventArgs е)

Смежные вопросы