Атрибут C # для окружения try - catch - PullRequest
11 голосов
/ 13 марта 2012

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

, похоже, не работает вообще

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

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

Моя сеть верхнего уровня.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], и там тоже не могу установить точку останова, поэтому я думаю, что с моей конфигурацией что-то не так, но я не могу понять, что,

Буду признателен за любые мысли или идеи

1 Ответ

2 голосов
/ 13 марта 2012

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

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

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

hth

Марио

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...