Bonsoir,
Je cherche comment je pourrais implémenter IDispatchMessageFormatter.
Je ne suis pas sur que ce soit bien cette interface qui doit être implémentée mais l'objectif est le suivant.
Je voudrais ajouter des endpoints pour pouvoir faire les mise à jour partielles, donc PATCH.
Nous avons déjà pas mal de endpoints en place. Ce que nous constatons, concernant les UPDATE, c'est qu'il faut que l'utilisateur fasse une lecture de l'objet complet avant d'y faire les modifications. Puis il envoie tout le DTO dans la méthode UPDATE.
Nous trouvons cela plutôt lourd, c'est ce qui explique pourquoi je cherche à implémenter le concept de PATCH.
Mon idée serait que l'utilisateur envoie ce type de JSON.
1 2 3 4 5 6 7 8
| {
"adresseId":14253
"patchData":
[
"CodePostal":68120,
"Ville":"Eberensheim"
]
} |
J'ai pensé à cette structure afin d'avoir les datas les plus légères à faire transiter.
Cette structure de patchData me fait penser à un Dictionary<string,Object>.
J'ai donc "implémenté" la méthode
Patch(int adresseId, Dictionary<string,object> patchData)
Mais cela ne fonctionne pas puisque les items de Dictionary sont des KeyValuePair avec pour chacun une Key et une Value.
Il me faudrait donc envoyer ceci pour que cela puisse fonctionner:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| {
"adresseId":14253
"patchData":
[
{
"Key":"CodePostal",
"Value":68120
},
{
"Key":"Ville",
"Value":"Eberensheim"
}
]
} |
Cela fonctionne, mais ceci ne nous plait pas du tout!
J'ai fait pas mal de recherche sur le Web, j'ai trouvé ceci https://stackoverflow.com/questions/...40427#38440427
Je ne sais pas du tout si cela fonctionne puisque je ne comprends pas du tout comment le mettre en place (Comment l'implémenter, ni dans quelle collection de quel objet il doit être injecté).
Mais cela à bien l'air d'être ce que je recherche puisque la définition de l'interface est la suivante:
1 2 3 4 5
| public interface IDispatchMessageFormatter
{
void DeserializeRequest(Message message, object[] parameters);
Message SerializeReply(MessageVersion messageVersion, object[] parameters, object result);
} |
Je cherche bien à "désérialiser" la request.
Mais je ne trouve pas d'implémentation claire.
Je me demande aussi comment faire pour que le formatter par défaut soit utilisé si le Formatter customisé ne "sait" pas traiter le message.
Merci beaucoup pour vos conseils.
Partager