programing

각진, 매개 변수가 있는 Http GET?

bestprogram 2023. 7. 26. 22:16

각진, 매개 변수가 있는 Http GET?

나는 그런 방법으로 API 호출을 하는 방법을 모릅니다.

[HttpGet]
[ActionName("GetSupport")]
public HttpResponseMessage GetSupport(int projectid)

GET이지만 통과해야 할 매개 변수가 있기 때문에 어떻게 해야 합니까?이런 건가요?

let headers = new Headers();
      headers.append('Content-Type', 'application/json');
      headers.append('projectid', this.id);

      this.http.get('http://localhost:63203/api/CallCenter/GetSupport', { headers: headers })

다음과 같은 것을 갖는 것:

let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('projectid', this.id);
let params = new URLSearchParams();
params.append("someParamKey", this.someParamValue)

this.http.get('http://localhost:63203/api/CallCenter/GetSupport', { headers: headers, search: params })

물론 필요한 모든 매개 변수를 추가하여paramsURL 문자열을 사용하여 요청에 매개 변수를 전달하는 것보다 훨씬 유연합니다.

편집(28.09.2017):모타파르가 논평에서 말했듯이,searchAngular 4에서는 더 이상 사용되지 않으므로 를 사용해야 합니다.params

편집(02.11.2017):새 기능을 사용하는 경우HttpClient지금은 있습니다HttpParams모양과 용도는 다음과 같습니다.

let params = new HttpParams().set("paramName",paramValue).set("paramName2", paramValue2); //Create new HttpParams

그런 다음 기본적으로 동일한 방법으로 요청에 매개 변수를 추가합니다.

this.http.get(url, {headers: headers, params: params}); 
//No need to use .map(res => res.json()) anymore

및 의 문서에 더 많은 정보

Angular 9+의 경우 키 값 개념 없이 머리글과 매개 변수를 직접 추가할 수 있습니다.

const headers = new HttpHeaders().append('header', 'value');
const params = new HttpParams().append('param', 'value');
this.http.get('url', {headers, params}); 

위의 솔루션은 도움이 되지 않았지만 다음 방법으로 동일한 문제를 해결합니다.

private setHeaders(params) {      
        const accessToken = this.localStorageService.get('token');
        const reqData = {
            headers: {
                Authorization: `Bearer ${accessToken}`
            },
        };
        if(params) {
            let reqParams = {};        
            Object.keys(params).map(k =>{
                reqParams[k] = params[k];
            });
            reqData['params'] = reqParams;
        }
        return reqData;
    }

요청을 보냅니다.

this.http.get(this.getUrl(url), this.setHeaders(params))

NestJS 백엔드와 내가 모르는 다른 백엔드에서 작동합니다.

관심 있는 사람들을 위해 도움이 되는 코드 조각을 제공하는 것입니다.HttpParams2017년 답변에서 언급된 방향.

여기 제가 할 일이 있습니다.api.service요청에 대한 해당 HttpParams에 대한 매개 변수를 "자동화"합니다.

import { HttpClient, HttpParams } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Params } from '@angular/router';
import { Observable } from 'rxjs';
import { environment } from '@env';

@Injectable({
    providedIn: 'root'
})
export class ApiService {

    constructor(private http: HttpClient) { }

    public get<T>(path: string, routerParams?: Params): Observable<T> {
        let queryParams: Params = {};
        if (routerParams) {
            queryParams = this.setParameter(routerParams);
        }
        console.log(queryParams);
        return this.http.get<T>(this.path(path), { params: queryParams });
    }

    public put<T>(path: string, body: Record<string, any> = {}): Observable<any> {
        return this.http.put(this.path(path), body);
    }

    public post<T>(path: string, body: Record<string, any> = {}): Observable<any> {
        return this.http.post(this.path(path), body);
    }

    public delete<T>(path: string): Observable<any> {
        return this.http.delete(this.path(path));
    }

    private setParameter(routerParams: Params): HttpParams {
        let queryParams = new HttpParams();
        for (const key in routerParams) {
            if (routerParams.hasOwnProperty(key)) {
                queryParams = queryParams.set(key, routerParams[key]);
            }
        }
        return queryParams;
    }

    private path(path: string): string {
        return `${environment.api_url}${path}`;
    }
}

이 문제를 해결하기 위한 쉽고 유용한 방법

getGetSuppor(filter): Observale<any[]> {
   return this.https.get<any[]>('/api/callCenter/getSupport' + '?' + this.toQueryString(filter));
}

private toQueryString(query): string {
   var parts = [];
   for (var property in query) {
     var value = query[propery];
     if (value != null && value != undefined)
        parts.push(encodeURIComponent(propery) + '=' + encodeURIComponent(value))
   }
   
   return parts.join('&');
}

언급URL : https://stackoverflow.com/questions/44280303/angular-http-get-with-parameter