2013-04-04 10 views
6

Sto tentando di inviare un oggetto come parametro tramite Breeze senza esito positivo.Passaggio di un oggetto come parametro all'azione del controller Breeze

utilizzando il seguente codice posso inviare un tipo primitivo:

Cliente:

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

Server:

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

Tuttavia, se provo e passo un tipo complesso up, il param è sempre nullo:

Client:

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

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

Server:

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

Credo che questo sia in parte perché Breeze utilizza sempre un GET per le query. Un POST potrebbe gestire correttamente la serializzazione, ma non riesco a vedere alcun modo nell'API di Breeze per forzare un POST.

Se si passa sopra una rappresentazione stringa JSON dell'oggetto, è possibile selezionarlo dal lato server, ma ciò richiede la deserializzazione manuale. Mi rendo conto che potrei farlo al di fuori di Breeze con una chiamata WebAPI standard, ma sto cercando di mantenere tutte le mie chiamate sul lato server che attraversano la stessa pipeline.

È possibile farlo?

risposta

0

perché non utilizzare ->

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

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

invece di

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

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

Ciao Jay, ho provato questo e nessuna gioia - si ottiene l'errore Breeze "Il parametro 'parametri' deve essere un 'oggetto'". –

4

Si può mancare un attributo [FromUri]. Ogni volta che provavo a passare un oggetto o un insieme di parametri più complessi, tutto tornava come nulla finché non aggiungevo quell'attributo.

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