2012-10-06 16 views
20

Ho un'applicazione Web API che ho bisogno di mettermi in contatto con il valore di ritorno di alcuni dei punti finali API tramite il metodo OnActionExecuted di un ActionFilterWeb ActionFilter API modificare tornato valore

sto usando un custom attributo per identificare il endpoint che hanno dati che ho bisogno di modificare, ma non riesco a trovare l'oggetto risultato effettivo all'interno di HttpActionExecutedContext.

Grazie per qualsiasi aiuto!

risposta

37

È possibile ottenere il valore restituito tramite la proprietà Response.Content. Se l'azione ha restituito un oggetto è possibile gettarlo ai ObjectContent da dove è possibile ottenere l'istanza effettiva del valore restituito:

public class MyFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(HttpActionExecutedContext context) 
    { 
     var objectContent = context.Response.Content as ObjectContent; 
     if (objectContent != null) 
     { 
      var type = objectContent.ObjectType; //type of the returned object 
      var value = objectContent.Value; //holding the returned value 
     } 
    } 
} 
+0

Grazie per la risposta. Il tipo di 'context.Response.Content' è' System.Net.Http.ObjectContent > '. Voglio solo la parte 'System.Collections.Generic.IEnumerable '. Come ottengo quello? –

+0

'ObjectContent ' deriva dal 'ObjectContent' quindi basta cast' context.Response.Content' a 'ObjectContent', quindi è possibile utilizzare la proprietà' Value' per eseguire il cast su 'IEnumerable ' .. . – nemesv