2014-04-27 2 views
1

Je souhaite transmettre des informations du filtre d'action (base de données) à la fonction Action.WEBAPI ActionContext Request.Properties.Add pour stocker des informations sensibles

Est-il sécuritaire d'utiliser ActionContext Request.Properties.Add pour stocker les données?

Y a-t-il une quelconque chance pour que l'information soit vue par le client WEBAPI ou son coffre-fort pour stocker des informations dans le Cache \ Session?

Est-ce une meilleure façon de le faire?

Répondre

2

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" 
     }; 
    } 
} 
+0

Existe-t-il un meilleur moyen de transmettre les données ou c'est le meilleur? – Omtechguy

+0

Ajout de deux autres options à la réponse. –

Questions connexes