【问题标题】:Angular post not providing request body as expectedAngular 帖子未按预期提供请求正文
【发布时间】:2018-01-19 11:27:12
【问题描述】:

我的第一个单独的 Angular 应用程序...

我正在尝试发布到我的全新网络服务并使用以下代码:

  headers = new HttpHeaders(
    {'Content-Type':'text/plain'}
  );
  loginUrl = "http://localhost:8093/login";

  login(credentials): Observable<String> {
    const body = new HttpParams()
      .set('payload', 'testing...');

    let bodyValue = body.toString()
    return this.http.post<String>(this.loginUrl, body,{headers: this.headers})
  }

我的 Spring Boot 应用程序抛出异常,因为在它获取帖子时,请求中缺少有效负载参数。

我在我的 Firefox 浏览器中打开了 Web 开发者网络面板并看到以下视图:

起初,我认为这是我弹簧方面的错误配置,但我运行了一个 curl:

  curl --data "payload=testing" http://localhost:8093/login

这很好地进入了我的网络服务。因此,Angular 对我的参数进行编码的方式有所不同。

我找到了这个页面:https://github.com/angular/angular/issues/19535,但不确定它是否相关。

【问题讨论】:

  • 你能说明你是如何分配loginUrl的吗? http.post 的第二个参数是内容主体 - 不是 URL 参数
  • @pixelbits 完成。

标签: javascript spring angular http-post


【解决方案1】:

http.post 的第二个参数是内容正文。您可以通过这种方式传递 URL 参数:

const urlParams = new HttpParams()
  .set('payload', 'testing...');

 return this.http.post<String>(`${this.loginUrl}?${urlParams}`, '',{headers: this.headers});

如果你想将 url 参数传递到正文中,那么:

  login(credentials): Observable<String> {
    const body = new HttpParams()
      .set('payload', 'testing...');

    let bodyValue = body.toString()
    return this.http.post<String>(this.loginUrl, bodyValue,{headers: this.headers})
  }

【讨论】:

  • 有趣。这似乎奏效了。我要确保的是,这对外界是不可见的。当我切换到 https 时,我想确保用户名和密码是加密的。
猜你喜欢
  • 2018-05-14
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 2020-06-06
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
相关资源
最近更新 更多