Angular,Http GET参数?

33 typescript angular

我不知道如何对这样的方法进行API调用:

[HttpGet]
[ActionName("GetSupport")]
public HttpResponseMessage GetSupport(int projectid)
Run Code Online (Sandbox Code Playgroud)

因为它是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 })
Run Code Online (Sandbox Code Playgroud)

DGa*_*ski 75

有这样的事情:

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 })
Run Code Online (Sandbox Code Playgroud)

当然,附上你需要的每一个参数params.它比仅使用URL字符串将params传递给请求提供了更多的灵活性.

编辑(28.09.2017):正如Al-Mothafar在评论中所述,search从Angular 4开始被弃用,所以你应该使用params

编辑(02.11.2017):如果您正在使用新的HttpClient,现在有HttpParams,看起来和使用如下:

let params = new HttpParams().set("paramName",paramValue).set("paramName2", paramValue2); //Create new HttpParams
Run Code Online (Sandbox Code Playgroud)

然后将params添加到请求中,基本上,以相同的方式:

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

更多的文档HttpParamsHttpClient

  • `search`已弃用角4,请改用`params` (6认同)
  • 请记住,`params.set("key", value)`不会更新原始的params对象,因此您需要重新分配它:`params = params.set("key", value)`除非您链接他们喜欢在答案中 (5认同)

Yas*_*ldi 10

对于 Angular 9+,您可以直接添加标题和参数,而无需键值概念:

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