我正在向需要身份验证的服务发送请求,而且由于我目前的状态不是,我收到401响应。我试图看看我是否可以在我的代码中处理这个问题,在客户端并使用Typescript编写:
this.http.post(url, body, options).catch(e => {
if (e.status === 401) {
//Handle 401
}
return Observable.throw(e);
});
但问题是e.status
为零,即使从网络面板我可以看到响应的状态实际上是401.这是Angular的问题还是我做了什么错?
这是JSON.strigify(e)
的返回值:
{
"_body": { "isTrusted": true },
"status": 0,
"ok": false,
"statusText": "",
"headers": {},
"type": 3,
"url": null
}
BTW,我正在使用Angular 4.0.0(核心和http)。
由于上面发送的帖子请求,这是我在控制台中收到的错误:
(2) POST http://192.168.2.10:8080/test 401 ()
XMLHttpRequest cannot load http://192.168.2.10:8080/test. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.2.10:4200' is therefore not allowed access. The response had HTTP status code 401.
另一个谜团是,在控制台上报告了2个发布请求错误,而根据网络面板只发送了一个。
答案 0 :(得分:0)
如果您想知道服务错误的状态
{{1}}
在示例中,动词http是GET,您可以尝试使用POST,这是一样的想法。
我希望它可以帮助你
答案 1 :(得分:0)
我发现了导致问题的原因..它是服务器方面的问题。您需要先设置CORS中间件,然后再设置剩余的API中间件。
请注意我正在使用Laravel 5.6 + Angular 5
'api' => [
'throttle:60,1',
'bindings',
\Barryvdh\Cors\HandleCors::class,
],
'api' => [
\Barryvdh\Cors\HandleCors::class,
'throttle:60,1',
'bindings'
],
答案 2 :(得分:0)
我花了很长时间才弄清楚这个问题:您需要在服务器端的CORS方法配置中添加OPTIONS。我要表达的最终CORS配置是:
const corsOpt = {
origin: 'https://www.yourhost.com', // to configure origin url in the server
methods: ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS'], // to work well with web app, OPTIONS is required
allowedHeaders: ['Content-Type', 'Authorization'] // allow json and token in the headers
};