Typescript HttpClient.post 从 json 格式的字符串返回错误请求
Posted
技术标签:
【中文标题】Typescript HttpClient.post 从 json 格式的字符串返回错误请求【英文标题】:Typescript HttpClient.post returning bad request from json formatted string 【发布时间】: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()
,但没有成功
【问题讨论】:
【参考方案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 实现有关。
【讨论】:
以上是关于Typescript HttpClient.post 从 json 格式的字符串返回错误请求的主要内容,如果未能解决你的问题,请参考以下文章