所以,这是我关于stackoverflow的第一篇文章,所以请原谅我,如果我没有那么努力地搜索,但是...
我正在我们的公司Ionic2 + Angular2 App上构建一个简单的登录页面。登录表单对我们的后端进行http调用,如果用户的凭据正确,则使用用户的凭据进行响应,然后允许用户进入主页,否则会收到401错误。
昨晚,当我在Windows机器上完成布线时,一切都很完美。但是在工作中我们使用Mac,因此当我ionic run android
和/或ionic serve --lab
时,api调用没有正确附加参数。显示:
private theUrl = 'http://theurl.com/mobileapi/getUser.cfm?';
public onlogin(email: string, password: string) {
let params: URLSearchParams = new URLSearchParams();
params.set('email', email);
params.set('password', password);
return this.http.get(this.theUrl, { search: params })
.map(res => res.json())
}
此代码使用URLSearchParams设置URL参数,然后将它们作为选项直接传递到http.get()
请求中。 - 我们从前端角形式传递电子邮件和密码。
现在,当应用程序被提供/运行时,API调用最终看起来像这样:
http://theurl.com/mobileapi/getUser.cfm?&email=xxxx&password=xxxxx
我感兴趣的是网址的 .cfm?& 部分。我知道它不应该像电话那样被格式化......我在这里错过了一些东西来正确地格式化url params吗?
由于
答案 0 :(得分:0)
因为您的网址有?
- > private theUrl = 'http://theurl.com/mobileapi/getUser.cfm?';
因此,当Angular构建params时,它会标记为有param,然后这会在你得到的时候附加url。
使用此代替:
private theUrl = 'http://theurl.com/mobileapi/getUser.cfm';
从此代码中了解更多信息:
if (search.length > 0) {
let prefix = '?';
if (this.url.indexOf('?') != -1) {
prefix = (this.url[this.url.length - 1] == '&') ? '' : '&';
}
// TODO: just delete search-query-looking string in url?
this.url = url + prefix + search;
}
https://github.com/angular/angular/blob/2.4.7/modules/%40angular/http/src/static_request.ts#L81-L88