2012-10-06 17 views
20

Mam aplikacji Web API, że muszę dostać Ahold wartości zwracanej niektórych punktów końcowych API poprzez metodę wykonania ActionFilter za OnActionExecutedWeb API ActionFilter modyfikują zwracane wartości

Używam niestandardowy atrybut do identyfikacji punkty końcowe, które mają dane, które muszę zmodyfikować, ale nie mogę znaleźć rzeczywistego obiektu wyniku z HttpActionExecutedContext.

Dzięki za wszelką pomoc!

Odpowiedz

37

Możesz uzyskać zwróconą wartość za pośrednictwem właściwości Response.Content. Jeśli powrócił twoje działanie obiektu można oddać go do ObjectContent skąd można uzyskać rzeczywiste wystąpienie Wartość zwracana:

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

Dzięki za odpowiedź. Typ 'context.Response.Content' to' System.Net.Http.ObjectContent > '. Chcę tylko część 'System.Collections.Generic.IEnumerable '. Jak mogę to zdobyć? –

+0

'ObjectContent ' pochodzi z 'ObjectContent', więc po prostu wyrzuć' context.Response.Content' do 'ObjectContent', a następnie użyj własności' Value' do rzutowania na 'IEnumerable ' .. . – nemesv