【问题标题】:Typescript HttpClient.post returning bad request from json formatted stringTypescript HttpClient.post 从 json 格式的字符串返回错误请求
【发布时间】:2021-06-30 19:50:18
【问题描述】:

好的,我已经操作这个字符串好几个小时了!因此,非常感谢任何帮助

我正在尝试简单地拨打电话并生成密码。该 api 被设置为接收一个字符串 a 解析 json 格式的字符串本身。

private headers = new HttpHeaders({ 'Content-Type': 'application/json' });

  constructor(http: HttpClient) {
    var url: string = 'https://eus-safeaccounts-test.azurewebsites.net/' + 'passwords/generate';
    var body: string = '"{\"regex\":\"[a-zA-Z0-9]\",\"minLength\":8,\"maxLength\":12}"';

    http.post<string>(url, body, { headers: this.headers }).subscribe(result => {
      this.signUpResponseStr = result["password"];
    }, error => console.error(error));
  }

此调用返回代码 400 错误请求。 (我认为是因为文本没有被视为 json?)

但是,如果我们设置body = '""';,那么我们会得到一个从 api 发回的密码,这没有问题。它在 API 端被视为一个空字符串,然后他们给我们一个密码。进一步探索我尝试设置body = '"abc"';,因为这是一个不遵循json格式的字符串。在这种情况下,我们不会收到错误的请求 400,但 api 会识别错误的 json 格式并返回 Invalid Json

我的问题:

我发送此请求的正文字符串应该是什么样的? API 是开放的,因此任何人都可以重现,API 代码不应该与 400 bad request 问题有任何关系,正如我们从我的探索中看到的那样,但代码在这里https://github.com/nickpavini/SafeAccountsAPI

感谢您的帮助! :)

编辑:我也尝试过以JSON 类型发送,我也尝试过JSON.stringify(),但没有成功

【问题讨论】:

    标签: json typescript rest


    【解决方案1】:

    可能正文不应该被双引号引起来,而应该看起来像...

    var body: string = '{"regex":"[a-zA-Z0-9]","minLength":8,"maxLength":12}'
    

    【讨论】:

    • 也不是这样。那是我尝试的第一件事。添加双引号只是为了使它作为空字符串通过
    【解决方案2】:

    找到了。该字符串有点难以理解,但希望这对其他人有帮助。

    body = '"{\\"regex\\":\\"[a-zA-Z0-9]\\",\\"minLength\\":8,\\"maxLength\\":12}"'
    

    在这种情况下,主体似乎包含一个字符串。 (服务器将收到的实际字符串)

    在该字符串中,每当我们需要服务器查看不关闭字符串的" 时,我们必须传递一个实际的反斜杠\\,然后传递一个"。在这种情况下,我们不需要 3 个反斜杠,因为开头的单引号 ' 确保包含所有括号。

    注意:如果您觉得奇怪,请使用相关 API 进行测试。我认为这与 api 实现有关。

    【讨论】:

      猜你喜欢
      • 2015-11-12
      • 2013-08-02
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多