Hello les devs !
J'ai un petit souci qui me cause bien des problèmes :
J'ai mis en place un datasnap REST, installé comme service sur un serveur externe. Tout fonctionne bien, j'arrive à exécuter des requêtes depuis des sites de test de requêtes REST, et j'arrive à l'utiliser depuis des applications mobiles. Cependant, les requêtes ne fonctionnent pas si je les lance depuis un serveur web local. Le message d'erreur est le suivant :
Access to XMLHttpRequest at '<URI de la requête>' from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
À partir de là, j'ai bien compris qu'il fallait que j'ajoute le header mentionné. J'ai trouvé plusieurs exemples grâce à notre ami Google, mais toutes sont pour les composants de type TWebModule. Or, mon Datasnap utilise le composant TDSHTTPservice, et pour celui-ci je n'ai trouvé que quelques réponses (qui ne fonctionnent pas) telles qu'ici : https://stackoverrun.com/cn/q/1694676
Cependant, même avec l'ajout de ce code, le header n'apparaît pas. N'étant qu'un utilisateur novice de Datasnap, je me permets de vous demander votre aide .
EDIT : J'ai mis des LogMessage dans les événements OnHTTPTrace et OnFormatResult du TDSHTTPService, et BeforeDispatch du TDSHTTPServiceProxyDispatcher. Visiblement, aucun de ces événements n'est déclenché lors du requête, d'où l'inefficacité des codes mentionnés plus haut. J'indique également que le LogMessage fonctionne correctement, car j'en ai mis un dans l'événement OnUserAuthenticate du TDSAuthenticationManager, et qu'il s'affiche dans les logs.
Partager