typescript - Cum voi transmite parametrii de interogare către API-ul REST într-un serviciu într-o aplicație Angular?


Încerc să transmit parametri de interogare într-un serviciu către o API REST.

Exemplu de cum ar trebui să trimit la API.(AȘTEPTAT)

http://localhost:2000/world/123456789/avengers?type=fruits&fields=_all

Am încercat după cum urmează:

     all(countId) {
        const headers: HttpHeaders = new HttpHeaders({
            "_id" : countId, 
            "content-type" : "application/json"
        });
        let params = new HttpParams();
        params = params.append("type", "fruits");
        params = params.append("fields", "_all");
        const options = {
            headers: headers,
            params: params
        };
        return this.http.put ( "http://localhost:2000/world/123456789/avengers", options )
    }

Dar nu pot să le transmit ca parametri de interogare. Cum voi face asta?

Răspuns #1

În prezent, trimiteți opțiunile dvs. ca payload al cererii, așa cum ați descoperit. Dacă nu aveți un payload, puteți transmite null:

all(countId) {
  // ....
  return this.http.put("...", null, options)
                              ^^^^
}

Răspunsul #2

Pentru că HTTP PUT/POST trimite corpul fără a adăuga șirul de interogare în URL (poți folosi o bibliotecă pentru a construi șirul de interogare), astfel încât trebuie să îți construiești URL-ul și opțiunea.

 * @param url The endpoint URL.
     * @param body The resources to add/update.
     * @param options HTTP options
     *
     * @return An `Observable` of the response, with the response body as a JSON object.
     */
    put(url: string, body: any | null, options?: {}


all(countId) {
        const headers: HttpHeaders = new HttpHeaders({
            "_id" : countId, 
            "content-type" : "application/json"
        });

        const options = {
            headers: headers,
            params: params
        };
        return this.http.put ( "http://localhost:2000/world/123456789/avengers??type=fruits&fields=_all", options)
    }