【问题标题】:HTTP Post request body is interpreted as text/plain instead of url-encoded.HTTP Post 请求正文被解释为 text/plain 而不是 url 编码。
【发布时间】:2016-07-21 12:24:36
【问题描述】:

这就是我的电子邮件功能的样子:

sendEmail(fromName, fromEmail, message) {
    var headers = new Headers();
    var recieverMail = "abc@cdf.com";//service@csc.kth.se"
    var subject = "error report submitted by interactive screen"
    var recieverName = "CSC SERVICE";
    headers.append("Authorization", "Basic "+btoa("api:key-MY_API_KEY"));
    headers.append("content-type", "application/x-www-form-urlencoded");
    var url = "https://api.mailgun.net/v3/mymailgunserver.mailgun.org/messages ";
    var body = "from="+fromName+"<"+fromEmail+">&to="+recieverName+"<"+recieverMail+">&subject="+subject+"&text="+message;

    return this.http.post(url,body,{headers:headers});
  }

从上图可以看出,我的请求中还附加了一个text/plain header,这是为什么呢?

我的请求正文被解释为文本/纯文本,而不是 url 编码。有什么建议可以解决这个问题吗?

【问题讨论】:

  • 因为已经有一个默认值,而您只是附加值。请参阅 docs.angularjs.org/api/ng/service/$http>。
  • 感谢您的回答,但您提到的文档是 angular 1。您知道如何覆盖 angular 2 中的默认标题吗?我试图在 angular 2 文档中找到它,但没有成功。
  • 您可以尝试使用new Headers({"content-type": "application/x-www-form-urlencoded"}) 创建标头,然后使用.append Auth 标头并检查吗?
  • 但那是我已经做过的,不是吗?
  • 我尝试按照您刚才描述的方式创建我的标头,然后附加我的身份验证标头,结果完全相同。

标签: http https angular http-post


【解决方案1】:

我想知道 HTTP 标头名称是否不区分大小写。您可以尝试以下方法:

let headers = new Headers();
headers.append("Content-Type", "application/x-www-form-urlencoded");

另一个可能的问题是您忘记导入 Headers 类:

import { Http, Headers, ... } from '@angular/http';

【讨论】:

    【解决方案2】:

    你可以试试。

    headers.append("Content-Type", "application/x-www-form-urlencoded");
    

    请求头参数必须是“Content-Type”。因为请求头参数区分大小写。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 2018-04-04
      • 2019-05-11
      • 2015-05-31
      • 2022-01-06
      • 2021-07-15
      相关资源
      最近更新 更多