Mi trovo a scrivere metodi con try {stuff} catch (Exception e) {log, other stuff} per uscire un po ', quindi stavo cercando di capire come creare un attributo per aiutare io fuori. Ho controllato abbastanza estesamente i seguenti thread e non riesco a far funzionare la mia implementazione.Attributo C# per circondare 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
mio primo livello web.config è impostato su
<customErrors mode="On" defaultRedirect="/error.html"/>
e sto compilazione in modalità non-debug. Il mio attributo è seguito:
[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;
}
}
e sto chiamando qui -
public class Test : Controller { [SafeWebMethod] public ActionResult Test() { throw new ArgumentException("test"); } }
io non riesco a ottenere un punto di interruzione colpito l'attributo, o se cambio il codice di stato per farlo apparire.
Ho anche copiato il codice dall'attributo [HandleError] e non riesco a ottenere un punto di interruzione anche lì, quindi penso che sia qualcosa di sbagliato con la mia configurazione, ma non riesco a capire cosa.
Tutti i pensieri o idee sarebbe molto apprezzato
hm, secondo msdn, http://msdn.microsoft.com/en-us/library/system.web.mvc.handleerrorattribute.aspx, HandleError "rappresenta un attributo che è usato per gestire un'eccezione generata da un metodo di azione. ", e in effetti non ho visto nulla di rigido sugli accessor delle proprietà. Detto questo, potrebbe essere perché il mio "metodo" non è un metodo di azione? – hermitt
Im non nella programmazione web asp ma presumo che il metodo di azione si inverta al codice dietro i metodi chiamati dal controller mvc. Suppongo inoltre che il controller mvc rilevi l'eccezione e valuti gli attributi se il metodo e quindi procede di conseguenza. Questo è lo schema che potresti anche usare - nel catch (..) del chiamante scrivi una funzione che controlla gli attributi e agisce di conseguenza. hth Mario –