正文中的 Http Post 字符串值

Posted

技术标签:

【中文标题】正文中的 Http Post 字符串值【英文标题】:Http Post string value in body 【发布时间】:2017-11-24 22:36:12 【问题描述】:

Http头的content-type是application/x-www-form-urlencoded

我必须发布一个字符串值。 environmentId: "predevnet"

在我的上一个项目中,我使用 JQuery 进行 ajax 调用:

    $.ajax(
        headers: this.headers,
        type: this.type,
        url: this.url,
        data: environmentId: "predevnet",
        dataType: this.dataType,
        contentType: this.contentType,
        async: isAsync,
        success: success,
        cache: this.cache,
        error: error
    );

现在我正在尝试用 Angular 进行相同的调用

return this.http
    .post(this.baseUrl + action, JSON.stringify(environmentId: "predevnet"), options)
    .map(response => response.json() as DcResponse<T>);`

预期结果:表单数据应如下所示:Result Expected

无论有没有JSON.stringify,我得到的结果是这样的:Current results

【问题讨论】:

如果将 Content-Type 标头设置为 application/json 是否有效? 不,我试过了,但它发送了一个 json 对象。它只需要发送带有其名称的变量 你试过用toString()代替JSON.stringify()吗? 【参考方案1】:

当你想在 POST 请求的正文中只发送一个键值对作为参数时,你必须省略 key 部分。

因此,如果您希望 content-type 为 application/x-www-form-urlencoded,那么您的示例必须是这样的:

return this.http
    .post(this.baseUrl + action, '=predevnet', options)
    .map(response => response.json() as DcResponse<T>);`

否则,如果您更喜欢application/json,那么您可以写:

return this.http
    .post(this.baseUrl + action, '"predevnet"', options)
    .map(response => response.json() as DcResponse<T>);`

【讨论】:

以上是关于正文中的 Http Post 字符串值的主要内容,如果未能解决你的问题,请参考以下文章

带有字符串正文的 ios HTTP Post

Alamofire POST 请求,正文中有一个简单的字符串作为参数,标头仍然显示缺少的参数值

Flutter 中的 Base64 字符串 HTTP Post

Flutter 中使用 Http Post 上传正文

使用 http 端点访问 lambda 中的 HTTP 请求(标头、查询字符串、cookie、正文)对象

在 Swift 中使用 JSON 正文发出 HTTP Post 请求