2013-01-24 2 views
0

J'ai un type de demande de base ..actionfilters de WebAPI, comment injecter une valeur lors de l'utilisation de différents types d'arguments qui héritent d'un type de base

classe RequestBase

{ 
    public string inputId; 
    public string derivedid; 
} 

et types héritant ..

class RequestA : RequestBase 
{ 
    public string name; 
} 

et

class RequestB : RequestBase 
{ 
    public string color; 
} 

J'ai un service WebAPI, certaines actions prennent un paramètre d'entrée de Requesta, certains prennent RequestB

[HttpPost] 
[MyFilter] 
[ActionName("Process1")] 
    public HttpResponseMessage Process1(RequestA request) 
    { 
     //do something with request.derivedId 
    } 

[HttpPost] 
[MyFilter] 
[ActionName("Process2")] 
    public HttpResponseMessage Process2(RequestB request) 
    { 
     //do something with request.derivedId 
    } 

j'ai une ActionFilter qui prend la inputId de la demande et génère un derivedId

public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     RequestBase request = (RequestBase)actionContext.ActionArguments["request"]; 
     string inputId = request.inputId; 

     string derivedId = inputId + "123"; 
     // ?? somehow inject derivedId back into the actionContext so that my controller methods can access? 
    } 

Comme mon commentaire indique ci-dessus, je voudrais remplir le champ derivedId et le rendre accessible à mes méthodes de contrôleur.

Merci à l'avance

Répondre

Questions connexes