2013-04-04 2 views
6

J'essaie d'envoyer un objet en tant que paramètre via Breeze sans succès.Passage d'un objet en paramètre à l'action du contrôleur Breeze

En utilisant le code suivant je peux envoyer un type primitif:

Client:

var query = EntityQuery 
    .from('account/authenticate') 
    .withParameters({ loginRequest: "hello" }); 

Serveur:

[BreezeController] 
public class AccountController : ApiController 
{ 
    [HttpGet] 
    public LoginResult Authenticate(string loginRequest) 
    { 
     // String for loginRequest received successfully 
    } 
} 

Cependant, si je tente de passer un type complexe jusqu'à la param est toujours null:

Client:

var loginRequest = { userName: 'me', password: 'pass' }; 

var query = EntityQuery 
    .from('account/authenticate') 
    .withParameters({ loginRequest: loginRequest }); 

Serveur:

[BreezeController] 
public class AccountController : ApiController 
{ 
    [HttpGet] 
    public LoginResult Authenticate(LoginRequest loginRequest) 
    { 
     // Object for loginRequest always null 
    } 
} 

Je crois que cela est en partie parce que Breeze utilise toujours un GET pour les requêtes. Un POST peut gérer correctement la sérialisation, mais je ne vois aucun moyen dans l'API Breeze de forcer un POST.

Si je laisse passer une représentation de chaîne JSON de l'objet, je peux la récupérer côté serveur, mais cela nécessite une désérialisation manuelle. Je me rends compte que je pourrais le faire en dehors de Breeze avec un appel WebAPI standard, mais j'essaie de faire en sorte que tous mes appels côté serveur passent par le même pipeline.

Est-ce possible?

Répondre

0

Pourquoi ne pas utiliser ->

var loginRequest = { userName: 'me', password: 'pass' }; 

var query = EntityQuery 
    .from('account/authenticate') 
    .withParameters(loginRequest); 

au lieu de

var loginRequest = { userName: 'me', password: 'pass' }; 

var query = EntityQuery 
    .from('account/authenticate') 
    .withParameters({ loginRequest: loginRequest }); 
+0

Salut Jay, j'ai essayé cela et pas de joie - vous obtenez l'erreur Breeze "Le paramètre 'paramètres' doit être un 'objet'". –

4

Vous pouvez manquer un attribut [FromUri]. Chaque fois que j'essayais de passer un objet ou un ensemble de paramètres plus complexe, tout revenait à zéro jusqu'à ce que j'ajoute cet attribut.

[BreezeController] 
public class AccountController : ApiController 
{ 
    [HttpGet] 
    public LoginResult Authenticate([FromUri] LoginRequest loginRequest) 
    { 
     // Object for loginRequest always null 
    } 
} 
Questions connexes