2010-12-15 3 views
0

Ma méthode Web renvoie objet 'utilisateur' qui a beaucoup de propriétés: Id, Nick, E-mail, FirstName, SecondName, etc ...ASP.NET AJAX: Comment limiter quantité de propriétés transférées au client

[WebMethod] 
public User GetUserById(int userId) 
{ 
    vfm_elita.elita_table.user.User user = 
     vfm_elita.elita_table.user.User.GetUserById(userId); 
    return user; 
} 

Y at-il une possibilité de limiter la quantité de propriétés retournées? Ou je devrais créer une classe séparée (UserForClientForParticular) qui a seulement des propriétés requises?

Merci.

P.S. Devinez, ma dernière idée sera la réponse suggérée :), mais de toute façon, toutes les pensées sont les bienvenus

Répondre

1

C'est une bonne idée d'utiliser un objet de transfert de données, spécialisé pour exposer uniquement les propriétés que le client devrait connaître. Vous pouvez également, si vous le prototypage, pressé, ou ne veulent pas créer une classe DTO pour une autre raison, vous pouvez utiliser un type anonyme pour rogner la réponse:

[WebMethod] 
public object GetUserById(int userId) 
{ 
    vfm_elita.elita_table.user.User user = 
    vfm_elita.elita_table.user.User.GetUserById(userId); 

    // Will return something like {"Nick":"Encosia","FirstName":"Dave"} 
    return new { Nick = user.Nick, FirstName = user.FirstName }; 
} 
+0

Il est autorisé à utiliser type anonyme et retour "objet". C'est une bonne idée. Merci. – Budda

1

Vous devez toujours être très conscient des données que vous exposez dans vos API, surtout s'il y a une chance qu'elles soient consommées par des parties externes mais même si elles ne sont utilisées qu'en interne. Je recommanderais certainement ce que vous avez mentionné dans votre message et créer une construction conçue pour n'exposer que les données nécessaires dans ce contexte.

Mise à jour: nous vous recommandons également de consulter le projet AutoMapper sur codeplex qui gère automatiquement le mappage des valeurs de propriétés d'un objet (utilisateur) vers un autre objet (UserSummary).

Questions connexes