Le client ne verra pas les propriétés de la requête à moins que vous ne les sérialisiez explicitement. Ils restent complètement sur le côté serveur.
Pour répondre à votre question de suivi voici deux autres façons de le faire. Il n'y a pas de "meilleur" moyen par exemple. Tout dépend de la distance à laquelle vous voulez que l'information circule, et de la façon dont vous voulez que votre filtre soit générique. Ma préférence personnelle utilise l'objet contrôleur, mais encore une fois c'est juste une préférence.
Pour l'échantillon est ici d'un simple contrôleur de valeurs et une classe POCO:
[MyActionfilter]
public class ValuesController : ApiController
{
public string Foo { get; set; }
public User Get(User user)
{
if (Foo != null && user != null)
{
user.FamilyName = Foo;
}
return user;
}
}
public class User
{
public string FirstName { get; set; }
public string FamilyName { get; set; }
}
Le filtre d'action est mise en œuvre ci-dessous l'accès à naïvement l'objet contrôleur ou les paramètres de la méthode. Notez que c'est à vous d'appliquer le filtre avec parcimonie ou de faire des contrôles de type chèques/dictionnaires.
public class MyActionfilter : ActionFilterAttribute
{
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
controller = actionContext.ControllerContext.Controller;
// Not safe unless applied only to controllers deriving
// from ValuesController
((ValuesController)controller).Foo = "From filter";
// Not safe unless you know the user is on the signature
// of the action method.
actionContext.ActionArguments["user"] = new User()
{
FirstName = "From filter"
};
}
}
Existe-t-il un meilleur moyen de transmettre les données ou c'est le meilleur? – Omtechguy
Ajout de deux autres options à la réponse. –