Атрибут С# для окружения с помощью 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] и не могу получить точку останова там, поэтому я думаю, что это что-то не так с моей конфигурацией, но я не могу понять, что.
Любые мысли или идеи будут очень признательны
Ответы
Ответ 1
Переходя по ссылке, которую вы предоставили .net Атрибуты, которые обрабатывают исключения - использование в аксессуаре свойств, то, что вы хотите, невозможно (см. реализацию во втором фрагменте кода Aaronaught).
Если вы не используете какую-либо структуру аспектов, вам придется реализовать код, который проверяет наличие атрибута и действует на нем сам по себе, и запускать этот код в каждом операторе catch(...)
.
Идея, которая у вас была, была отличной, и я мог бы использовать ее в своей собственной структуре, но ограничение по-прежнему заключается в том, что вы должны реализовать ее самостоятельно.
HTH
Марио