Подтвердить что ты не робот

Атрибут С# для окружения с помощью try-catch

Я нахожу, что пишу методы с помощью try {stuff} catch (Exception e) {log, other stuff} quit bit, поэтому я пытался выяснить, как сделать атрибут, чтобы помочь мне. Я достаточно подробно рассмотрел следующие темы и не могу заставить свою реализацию работать.

атрибут не действует вообще

ASP.NET MVC Controller.OnException не вызывается

.net Атрибуты, обрабатывающие исключения - использование в аксессуаре свойств

Мой верхний уровень web.config установлен на

<customErrors mode="On" defaultRedirect="/error.html"/>

и я собираюсь в режиме не-отладки. Мой атрибут ниже:

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class SafeWebMethodAttribute: ActionFilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        filterContext.ThrowIfNull();

        if (filterContext.ExceptionHandled)
        {
            return;
        }
        Log.LogException(filterContext.Exception);
        filterContext.HttpContext.Response.StatusCode = 500;
        filterContext.HttpContext.Response.Write(filterContext.Exception);
        filterContext.ExceptionHandled = true;
    }
}

и я называю это здесь -

public class Test : Controller
{
    [SafeWebMethod]
    public ActionResult Test()
    {
        throw new ArgumentException("test");
    }
}

Кажется, я не могу получить попадание точки останова в атрибуте или изменить код состояния, чтобы он отображался.

Я также скопировал код из атрибута [HandleError] и не могу получить точку останова там, поэтому я думаю, что это что-то не так с моей конфигурацией, но я не могу понять, что.

Любые мысли или идеи будут очень признательны

4b9b3361

Ответ 1

Переходя по ссылке, которую вы предоставили .net Атрибуты, которые обрабатывают исключения - использование в аксессуаре свойств, то, что вы хотите, невозможно (см. реализацию во втором фрагменте кода Aaronaught).

Если вы не используете какую-либо структуру аспектов, вам придется реализовать код, который проверяет наличие атрибута и действует на нем сам по себе, и запускать этот код в каждом операторе catch(...).

Идея, которая у вас была, была отличной, и я мог бы использовать ее в своей собственной структуре, но ограничение по-прежнему заключается в том, что вы должны реализовать ее самостоятельно.

HTH

Марио