2013-03-17 8 views
5

Sto cercando di trovare un modo per ottenere il valore in questa querystring sul mio oggetto DTO.Valore di mappatura di un parametro in querystring su una proprietà DTO

example.org?code=abc 

Devo mappare il valore del codice alla proprietà AuthorizationCode (i nomi dei parametri non corrispondono neanche). Ho provato il routing come questo ma non funziona.

[Route("?code={AuthorizationCode}", "GET")] 
public class Registration 
{ 
    public string AuthorizationCode { get; set; } 
} 

Poiché questo è un URL di richiamata, non ho la possibilità di modificarlo. Come posso realizzare questo?

risposta

9

Leggere prima questo numero answer on ServiceStack's Routes. I percorsi devono contenere solo /path/info e non devono mai contenere queryString che sono automaticamente in grado di compilare da soli tutti i DTO di richiesta.

Se v'è solo una proprietà codice nel tuo DTO piace:

[Route("/registration", "GET")] 
public class Registration 
{ 
    public string Code { get; set; } 
} 

si può già popolarlo con: /registration?code=abc.

In caso contrario, se si vuole insistere avere nomi diversi per queryString e DTO, si può provare a creare un alias annotando i vostri DTOs come [DataContract]:

[Route("/registration", "GET")] 
[DataContract] 
public class Registration 
{ 
    [DataMember(Name="code")] 
    public string AuthorizationCode { get; set; } 
} 

In entrambi i casi è sempre possibile accedere al QueryString direttamente nella tua servizi o filtri:

public MyService : Service 
{ 
    public object Post(Registration request) 
    { 
     var code = base.Request.QueryString["code"]; 
    } 
} 
+0

Grazie per la tua risposta rapida. Suppongo di poter introdurre un altro segmento al mio URL di callback, ma altri callback saranno diversi dai parametri che passano in querystring. Dovrei usare lo stesso attributo Route su tutti gli DTO e decidere quale usare nei gestori Get/Post? –

+0

Non capisco la domanda, puoi aggiornare la domanda per fornire un esempio o un collegamento ad un gist cosa stai cercando di fare? – mythz

+0

Quindi, la stringa di query non è case-sensitive per i nomi param ?! – cvsguimaraes

Problemi correlati