Захват ошибок ASP.NET MVC и WebActivator

Я хочу знать, возможно ли перехватывать необработанные ошибки без изменения файлов web.config или global.asax.

В идеале я хотел бы использовать пакет WebActivator и получить что-то вроде этого:

[assembly: WebActivator.PostApplicationStartMethod(typeof(MyProject.Initialize), "Start")]

namespace MyProject
{
    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.Mvc;

    internal static Initialize
    {
        public static void Start()
        {
              // this doesn't work
              HttpContext.Current.ApplicationInstance.Error += ApplicationInstance_Error;
        }

        // this never fires
        static void ApplicationInstance_Error(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }
    }
}

Вопрос № 1: возможно ли перехватывать необработанные ошибки без изменения файлов web.config или global.asax?

Вопрос № 2: как?

Обновление: я отправил ответ ниже. Я не уверен, что это лучший способ сделать это. Любые комментарии приветствуются.

2 ответа

Решение

Я смог заставить что-то работать, используя этот метод:

[assembly: WebActivator.PreApplicationStartMethod(typeof(MyProject.Initialize), "Start")]

namespace MyProject
{
    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.Mvc;

    internal static Initialize
    {
        public static void Start()
        {
            GlobalFilters.Filters.Add(new WatchExceptionAttribute());
        }
    }

    public class CustomHandleErrorAttribute : HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            // do your thing here.
        }
    }
}

Смотрите следующий блог MSDN: HandleError

Другие вопросы по тегам