我刚开始使用 angular,我在调用验证我的 Web API 时遇到了问题。 我的 web api 使用 Owin,我已经在旧的 asp 站点上使用了它。 我打电话给 ajax 没有问题:
$.ajax({url: _TokenApi, 类型:"开机自检", 数据类型:"json", contentType: 'application/x-www-form-urlencoded;字符集=UTF-8', 标头:{ "Content-Type":"application/x-www-form-urlencoded", "授权":_CLIENTAUTH }, 数据:身体, 完成: 函数(结果( {
},
success: function(result) {
sessionStorage.setItem(_GLOBALPREFIX+'xms_token',result.access_token);
xms_Login_ok(dataLogin);
},
error: function(result) {
xms_alert('warning', 'Attenzione', 'Token non recuperato correttamente');
},
});
我想用角度做同样的调用,我找到了一个这样的例子
UserAuthenticationOriginal(UserName: string,Password: string(:Observable{let credentials='username=' +UserName + '&
password=' +Password +'&grant_type=password';
var reqHeader = new HttpHeaders({'Content-Type': 'application/x-www-urlencoded','No-Auth':'True' }(;
返回 this.http.post(这。ApiUrl+'token',encodeURI(credentials(,{headers:reqHeader}(;
}
此函数到达 Web API,但显然它没有进行身份验证,因为我调用了: "无身份验证":"真">
我试图替换为 headers.set('Content-Type', 'application/x-www-form-urlencoded'(; headers.set("Authorization", 'BASIC XXXXXXX'(; 让凭据="用户名=" +用户名 + "&密码=" +密码 +"&grant_type=密码"; 设 a= this.http.post(this.ApiUrl+'token',encodeURI(credentials(,{headers:headers}(;
但是我有一个错误: 错误类型错误: "this.api.UserAuthentication(...(未定义">
并且不对 Web API 进行任何调用
我的问题出在拦截器中。 这项工作:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if(window.sessionStorage.getItem('userToken')!=null){
request = request.clone({
headers:request.headers.set("Authorization","Bearer " +window.sessionStorage.getItem('userToken'))
.set("Content-type", "application/json")
});
}else{
this.router.navigateByUrl("/login");
}
return next.handle(request);
}