2013-02-24 11 views
7

Qual è la differenza tra l'utilizzo di MessageHandler e un filtro per verificare la presenza di una chiave API nell'intestazione della richiesta per un progetto API Web MVC.MessageHandlers vs Filters in asp.net mvc web api project

vedo che c'è un esempio ben delineata di un messageHandler solo per tale scopo in http://www.asp.net/web-api/overview/working-with-http/http-message-handlers

esempio

GlobalConfiguration.Configuration.MessageHandlers.Add(new ApiKeyHandler()); 

ma sembra che io possa fare la stessa cosa usando un filtro pure.

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

Supponendo ApiKeyFilter e ApiKeyHandler sia basta guardare l'intestazione della richiesta e verificare la presenza di una chiave API, che parte è più efficiente? Qual è la differenza?

risposta

6

MessageHandlers viene eseguito molto prima dei filtri.

l'ordine è:

-MessageHandler

-Authorization filtro

-Modello vincolante roba

filtri -Altri

sicurezza relativi dovrebbe essere eseguito il più presto possibile.

+0

se voglio solo ispezionare richiesta e risposta, ad esempio solo registrando il carico utile di richiesta e risposta, quale dovrebbe essere preferito? perché i filtri e i gestori possono gestirlo. Gli handler possono anche essere specifici per rotta. Quindi, la "sicurezza relativa alle cose" è l'unico elemento di differenziazione quando si tratta dei casi d'uso di ciascuno? –

+1

Riguarda l'ambito e l'ordine di esecuzione. Dato che i gestori di messaggi sembrano andare via in seguito, preferisco usare il middleware Katana per la registrazione. – leastprivilege

+0

grazie, sono ancora confuso. Solo per avere le mie nozioni di base, supponiamo che per ora non abbiamo katana. Se utilizzo i filtri per la registrazione, ci saranno degli svantaggi. Capisco che per le cose che devono essere eseguite i primi handler dovrebbero essere usati. ma suppongo di non avere alcun requisito di questo tipo con la registrazione, che è una scelta migliore (gestori o filtri). La registrazione è solo un esempio di citazione per la discussione. grazie ancora –