typescript Angular项目中的“GET”API

bfrts1fy  于 2023-02-05  发布在  TypeScript
关注(0)|答案(1)|浏览(174)

我在服务器上用GET方法设置了一个API,通过给它一个授权令牌和一个指定代码的主体,返回一个具有相同代码的对象的信息(它是一个序列号)。

getInfoMatricola(matricola: string,_token: string){
  fetch(this.url, {
   method: 'GET',
   headers: {
   Authorization: `Bearer ${_token}`
   },
   body: ` lookFor":"${matricola} `,
   })
    .then((response) => response.json())
    .then((data) => {
    console.log('Success:', data);
    })
    .catch((error) => {
    console.error('Error:', error);
    });
   }
   }`

它在控制台日志中显示了这个错误

Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.

我也尝试过使用http.get<any>(mycode),但我认为它不接受body,因为它给了我错误。

wj8zmpe1

wj8zmpe11#

正确的话,您应该使用query paramsresource params。下面是一些示例:
查询参数

this.httpClient.get(this.url, { params: {lookFor: matricola } })

资源参数

this.httpClient.get(`${this.url}/${matricolaID}`)

要添加额外的标题,只需向选项对象添加

this.httpClient.get(this.url, { params: {lookFor: matricola }, headers: headers_object })

您可以在这里找到文档:https://angular.io/api/common/http/HttpClient
此外,在大多数IDE中,您可以通过点击CMD + B(在Mac上)打开源代码,因此您将获得以下内容:

如果你真的需要添加一些body,你可以使用http.request,这样你就可以添加body到你的GET请求中,但是它可能无法正常工作。另外,与其添加JWT到请求中,更好的做法是创建一个拦截器。
在Angular DELETE中也不接受主体,但可以使用以下命令省略:

this.httpClient.request('delete',`${configuration.apiServerUrl}/images`, {
      body: { url: imageUrl },
    });

你可以用get做同样的事情--但是对于chrome来说,它不会通过。https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET

this.httpClient.request('GET','link-to-be', {
      body: { foo: bar },
    });

相关问题