Closed maxcoros closed 10 months ago
Puoi fare in diversi modi, ma il più semplice, introdotto proprio di recente, lo vedi nel demo "01.HelloWorld". Prova a guardare la unit TMainDataModule e in particolare il metodo: GetPersonAndHeader.
// 1. Get the raw response (IWiRLResponse)
LResponse := WiRLClientApplication1
.Resource('helloworld/person')
.QueryParam('Id', Id.ToString)
.Get<IWiRLResponse>;
// 2. Read the header from the response
LContentType := LResponse.ContentType;
// 3. Read the object (TPerson) from the response
LPerson := LResponse.Content.AsType<TPerson>;
Ho visto l'esempio, ma quello che non riesco a capire è come fare per accedere a tutte le chiavi dell'header. Come faccio per vedere l'intero contenuto dell'header?
Se guardi com'è fatta l'interfaccia IWiRLResponse
hai la property HeaderValue
che ti restituisce il valore di un header dato il suo nome. In alternativa puoi usare la property Headers
che ti restituisce un interfaccia IWiRLHeaders
che supporta gli enumerativi. In questo modo puoi scrivere una cosa tipo (vado a memoria):
var
LHeader: TWiRLHeader;
begin
...
for LHeader in AResponse.Headers do
begin
Writeln(LHeader.Name, LHeader.Value);
end;
end;
Grazie, non mi ero proprio accorto che IWiRLHeaders
supportasse gli enumerativi.
ho fatto un test ed effettivamente riesco a recuperare tutte le chiavi dell'header (o quasi). Il servizio a cui devo fare accesso setta due cookie, ma io riesco a vederne solo 1. Facendo la stessa chiamata con Postman li vedo tutti e due (prime due righe):
mentre utilizzando WiRL ottengo queste chiavi dall'header::
cosa mi sfugge?
Puoi essere che sia un bug. Adesso non riesco a fare dei test ma prova a modificare la unit WiRL.http.Headers
da così:
procedure TWiRLHeaders.SetValue(const AName, AValue: string);
var
LIndex: Integer;
begin
for LIndex := 0 to Count - 1 do
begin
if SameText(Items[LIndex].Name, AName) then
begin
if AValue = '' then
Delete(LIndex)
else
Items[LIndex].Value := AValue;
Exit;
end;
end;
Add(TWiRLHeader.Create(AName, AValue));
end;
a così:
procedure TWiRLHeaders.SetValue(const AName, AValue: string);
begin
Add(TWiRLHeader.Create(AName, AValue));
end;
Ho un problema con un app client, a seguito di una richiesta post come posso accedere all'header della risposta? Ho visto nei filtri che c'è la possibilità di accedere all'header tramite AResponseContext.Response.Headers.Values[] ma come faccio a vedere quali sono le chiavi presenti nell'header?