Me encuentro escribiendo métodos con try {stuff} catch (Exception e) {log, other stuff} salir un poco, así que estaba tratando de averiguar cómo hacer un atributo para ayudar Sacarme. He revisado los siguientes hilos bastante extensamente, y parece que no puedo hacer que mi implementación funcione.Atributo C# para rodear con try - catch
attribute does not seem to act at all
ASP.NET MVC Controller.OnException not being called
.net Attributes that handle exceptions - usage on a property accessor
Mi web.config de nivel superior se establece en
<customErrors mode="On" defaultRedirect="/error.html"/>
y estoy compilando en modo no-depuración. Mi atributo es el siguiente:
[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;
}
}
y lo estoy llamando aquí -
public class Test : Controller { [SafeWebMethod] public ActionResult Test() { throw new ArgumentException("test"); } }
Me parece que no puede conseguir un punto de interrupción de un golpe en el atributo, o si cambio de la código de estado para que aparezca.
También he copiado el código del atributo [HandleError], y tampoco puedo obtener un punto de interrupción, por lo que creo que hay algún problema con mi configuración, pero no sé qué.
Cualquier pensamiento o ideas serán bienvenidos
hm, de acuerdo con MSDN, http://msdn.microsoft.com/en-us/library/system.web.mvc.handleerrorattribute.aspx, HandleError "representa un atributo que se utiliza para manejar una excepción que arroja un método de acción. ", y realmente no vi nada estricto sobre los accesores de propiedad. Dicho esto, ¿podría ser porque mi "método" no es un método de acción? – hermitt
No estoy en la programación web asp, pero supongo que el método de acción revertir al código detrás de los métodos llamados por el controlador mvc. Además supongo que el controlador de mvc capta la excepción y evalúa los atributos si el método y luego procede en consecuencia. Este es un patrón que también podría usar: en la captura (...) de la persona que llama escribe una función que comprueba los atributos y actúa en consecuencia. hth Mario –