【发布时间】:2019-06-25 02:38:08
【问题描述】:
我有一个使用 .Net Web Api 开发的 REST Api 的 Angular 6 客户端。
除错误处理外,一切正常。当我尝试处理错误以对不同的状态代码(404、403、409、500...)做出不同的反应时,我根本无法让它工作。 HttpErrorResponse 对象没有任何应有的字段(如“状态”或“错误”)。
我做了一个超级简单的服务来重现这个问题:
对 service.ts 的请求
public test(): Observable<any> {
let url = this.templatesUrl + '/myMethod';
console.log('GET myMethod ' + url);
return this.http.get<any>(url)
.pipe(catchError(this.handleError));
}
错误处理程序(几乎直接来自官方文档):
private handleError(error: HttpErrorResponse) {
console.warn(error);
if (error.error instanceof ErrorEvent) {
// A client-side or network error occurred. Handle it accordingly.
console.error('An error occurred:', error.error.message);
} else {
// The backend returned an unsuccessful response code.
// The response body may contain clues as to what went wrong,
console.error(
`Backend returned code ${error.status}, ` +
`body was: ${error.message}`);
}
// return an observable with a user-facing error message
return throwError('Unexpected error');
}
.Net 端的服务:
[HttpGet]
[Route("myMethod")]
public IHttpActionResult myDotNetMethod()
{
return InternalServerError(new Exception("Details about the issue"));
}
服务被调用,它返回一个状态码 500 和一个 json 对象:
响应状态:
响应头,是json:
json 对象:
日志显示的是:没有状态,几乎是一个空对象:
看起来 HttpErrorResponse 几乎是空的。但是 API 的响应很好,状态码在那里,json 对象也在那里。
我错过了什么?
更新:如果您想知道日志中显示的“内部服务器错误”背后隐藏着什么(它只是 chrome 生成的调用堆栈):
更新 2: 这是显微镜下的错误对象。它只是“内部服务器错误”。没有状态或消息的痕迹。
【问题讨论】:
-
尝试在控制台打印整个错误对象并检查状态和消息是否存在。有时是
error.error.status和error.error.message。 -
Ashish,我已经在打印错误对象(handleError 中的第一行)。它包含...什么都没有(检查更新问题中的图片)。
-
能否在错误处理方法中设置断点并检查
error参数的值?我的猜测是传递的对象并不是真正的HttpErrorResponse实例 -
尝试一次 console.log
-
Jota 和 Ashish,运气不好。检查更新的问题,该对象是空的 :_(
标签: json angular rest error-handling http-status-codes