Einzelnen Beitrag anzeigen

Maliko

Registriert seit: 20. Jun 2019
89 Beiträge
 
Delphi 10.3 Rio
 
#1

DataSnap - In DSServerClass.OnGetClass-Event auf Request zugreifen

  Alt 26. Jan 2023, 09:26
Moin,

ich versuche gerade in unseren REST-Server ein Versionierungssystem einzubauen, sprich das die Endpunkte Versioniert sind. Daher hab ich mir das so gedacht, der Aufrufer gibt im Request im Header die Variable X-Version mit an und je nachdem welche Version angegeben wird, wird eine andere RestServerMethods.pas geladen. Dafür wollte ich das OnGetClass-Event der TDSServerClass-Componente nutzen. Leider hab ich bisher nicht herausfinden können wie ich zu diesem Zeitpunkt auf die Requestvariablen zugreifen kann. Hier einmal mein aktueller Event-Handler noch ohne Versionierung:

Delphi-Quellcode:
procedure TdASAPIRestServerModule.DSServerClass1GetClass(DSServerClass: TDSServerClass; var PersistentClass: TPersistentClass);
  PersistentClass := ASAPIRestServerMethods.Global;
end;
Ich hab bereits versucht über TWebModule auf das Requestobjekt zuzugreifen, allerdings scheint es zu dem Zeitpunkt wo das Event getriggert wird noch nicht zu existieren. Ich find auch nicht wirklich was im Internet zu dem Thema (oder ich benutze die falschen Suchparameter). Hat vielleicht jemand von euch eine Idee? Wie ich es gerne hätte wäre:

Delphi-Quellcode:
procedure TdASAPIRestServerModule.DSServerClass1GetClass(DSServerClass: TDSServerClass; var PersistentClass: TPersistentClass);
  if(RequestVar = 'v1_0') then
    PersistentClass := ASAPIRestServerMethods1.Global
  else if(RequestVar = 'v1_1') then
    PersistentClass := ASAPIRestServerMethods11.Global
  else
    PersistentClass := ASAPIRestServerMethods2.Global
end;
Kann mir da vielleicht jemand von euch weiterhelfen wie ich zu diesem Zeitpunkt an die Headervariablen des Requests komme? TWebModule hat das Objekt scheinbar zu dem Zeitpunkt noch nicht gefüllt und die globale Klassenvariable Request welche ich im AuthenticationManager.OnUserAuthenticate-Event verwende ist in diesem Event auch nicht vorhanden. Wüsste jemand von euch noch eine weitere Methode an die Headervariablen zu kommen, oder hat vielleicht eine bessere Idee wie ich das mit der Versionierung der Endpunkte lösen kann?

Viele Grüße
Maliko
  Mit Zitat antworten Zitat