所以,这是我在stackoverflow上的第一篇文章,所以如果我没有足够努力地搜索,请原谅我,但。。。
我正在我们公司Ionic2+Angular2应用程序上构建一个简单的登录页面。登录表单会对我们的后端进行http调用,如果用户的凭据正确,它会用用户的凭据进行响应,然后允许用户进入主页,如果不正确,他们会收到401错误。
昨晚,当我在窗户机上把它接线好时,一切都很顺利。然而,在工作中,我们使用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的一部分。我知道它不应该被格式化为那样的呼叫。。。我是不是错过了一些正确格式化url参数的东西?
感谢
因为你的url有?
->private theUrl = 'http://theurl.com/mobileapi/getUser.cfm?';
,所以当Angular构建参数时,它会标记为has-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