2012-06-19 17 views
11

ho implementato il filtro di eccezione come qui: http://www.asp.net/web-api/overview/web-api-routing-and-actions/exception-handling e registrato a livello globale, come Microsoft o StackOverflow-utenti (How to add global ASP.Net Web Api Filters?) ha spiegato.Web API: Filtro 'globale' non funziona (ExceptionFilter)

public static void RegisterWebApiFilters(System.Web.Http.Filters.GlobalFilterCollection filters) 
{ 
//other filters 
    filters.Add(new MyExceptionFilter()); 
} 

Ma se lancio un'eccezione, il mio metodo non viene chiamato. Il metodo di gestione delle eccezioni viene chiamato solo se aggiungo l'attributo [MyExceptionFilter] al metodo controller, ma spero di poterlo evitare per tutti i metodi registrando il filtro globalmente.

Ho provato a impostare un ordine per i filtri, ma questo non ha avuto alcun effetto.


Edit: Ho notato, che nella nuova Wep Api RC il metodo si chiama "RegisterGlobalFilters" e questo sembra essere la raccolta del filtro MVC.

Se chiamo

GlobalConfiguration.Configuration.Filters.Add(new MyExceptionFilter()); 

funziona. Questa è la collezione per il Web Api.

Sembra che devo costruire la mia classe "FilterConfig" per il Web API ...

risposta

16

Come ho detto nella mia interrogazione: Ci sono diverse raccolte di filtro. Uno per MVC e uno per l'API Web.

Se si desidera aggiungere il filtro alle API Web, aggiungere questa riga di codice al global.asax

GlobalConfiguration.Configuration.Filters.Add(new MyExceptionFilter()); 
+1

Grazie, mi ha segnalato nella giusta direzione. Un po 'sciocco tutte queste raccolte di filtri globali ... ..e ancora il mio filtro delle eccezioni registrato per i normali controller non funziona. Grr. –

+1

sì, ho questa linea ma in alcuni casi non funziona ancora ... posso dire che è inizializzata nel debugger, ma non è attivata ad ogni eccezione nel mio web API –

+0

In WebAPIv2 [this] (http://stackoverflow.com)/a/26677989/2944723) ha funzionato per me – tgarcia