Comment transmettre la liste des types complexes dans la chaîne de requête?
-
12-11-2019 - |
Question
Comment passeriez-vous une liste de types complexes dans Servicestack?Par exemple, ma demande DTO ressemble à ceci:
//Request DTO
public class Test
{
public IList<Fund> Funds { get; set; }
}
public class Fund
{
public string Key { get; set; }
public int Percent { get; set; }
}
Comment puis-je passer l'objet sérialisé via HTTP GET?
http://localhost:49490/api/funds={ ?? }
KeyValueDatacontractDesérializer: Erreur lors de la conversion de l'erreur en Type: Type Les définitions doivent commencer par un "{", en attendant de type "Fonds" de type Serialized, à partir de: asdf
La solution
ServiceStack analyse le querystring à l'aide de JSV Format C'est essentiellement JSON avec le style CSVCitations (c'est-à-dire uniquement des devis lorsque votre valeur a un caractère d'évacuation).
Bien que vous n'aviez pas défini une route personnalisée ici, dans la plupart des cas, votre itinéraire personnalisé est identique à votre demande DTO qui, dans ce cas, est Test pas / Fonds .
Assumer ainsi un itinéraire personnalisé ressemble à:
Routes.Add<Test>("/test");
Vous pouvez appeler votre service via une querystring comme:
http:// localhost: 49490 / API / test? Fonds= [{Key: Key1, pourcentage: 1}, {Key: Key2, pourcentage: 2}]
sur une note latérale Les interfaces sur les DTO sont généralement une mauvaise idée, vous devriez envisager d'éviter (au moins limiter) son utilisation à tout moment.