json - '+' 字符在 HttpParams Angular 6 中转换为空格

标签 json angular typescript encoding

我有一个 JSON 对象并使用 HttpParams 传递它,但它会将 + 转换为空格并发送到后端。我已经尝试了所有可能的方法,但没有人解决它的 JSONObject 字符串。

this.updateUser({"name":"ABC","mobile": "+911234567890","text":"1 + 2 = 3"});

public updateUser(myObj) {

    const body = new HttpParams().set('user_object', JSON.stringify(myObj));
    return this.http.post(url, body, {
      headers: new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8')
    });
  }

当我在 Network 中检查包含 + 字符的对象时,它会自动转换为空格。

最佳答案

这是 Angular 中 HttpParams 的问题。参数值中的 + 被转换为 。我有一个类似的问题,其中我有一个 POST 请求,它接受 Base64 编码字符串形式的文件。此文件的 Base64 转换可以包含一个 + 符号,它被转换为一个 。我在我的项目中实现了一个 CustomURLEncoder 来处理这个问题。以下是供您引用的片段:

import {HttpParameterCodec} from '@angular/common/http'

export class CustomURLEncoder implements HttpParameterCodec {
    encodeKey(key: string): string {
        return encodeURIComponent(key); 
    }
    encodeValue(key: string): string { 
        return encodeURIComponent(key); 
    }
    decodeKey(key: string): string { 
        return decodeURIComponent(key); 
     }
    decodeValue(key: string) {
        return decodeURIComponent(key); 
     }
}

并且您可以将编码器与 HttpParams 一起使用,如下所示:

import {CustomURLEncoder} from './urlencoder.component';
import {HttpParams, HttpHeaders, HttpClient} from '@angular/common/http';

export class ApiService {
    constructor(private httpClient: HttpClient){}

    base64 = "Encoded+Base64+File+Data" //String with '+'
    const fileDetails = new HttpParams({encoder: new CustomURLEncoder() })
        .set('filename','CustomEncodedFile.xlsx')
        .set('filedata',base64);

    return this.httpClient.post(url, fileDetails, {
        headers: new HttpHeaders().set('Content-Type', 'application/x-www- 
        form-urlencoded;charset=utf-8')
    });
}

关于json - '+' 字符在 HttpParams Angular 6 中转换为空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51942703/

相关文章:

php - 使用 POST/GET 将数组从 Objective C 发送到 PHP

javascript - Angular 4 : unable to obtain response string using httpclient get

javascript - RXJS Angular - 如何在包含可观察对象的 foreach 循环结束时调用函数?

reactjs - 使用 React refs 时如何解决这些 TypeScript 错误?

javascript - 在 vue.js 中创建一个包含数据的 obj 名称

mysql - 我应该在 JSON 中编码大括号还是方括号?

python - 如何从 Python REST API 返回 JSON

javascript - 将 UTC 时间格式拆分为 Angular2 中所需的格式

Angular - 连接到代理服务器并获得响应,但随后显示尝试代理到 : localhost to actual server 时发生错误

javascript - 如何通过打印推断的变量类型来调试 TypeScript?