当我尝试使用返回字符串的HttpClient调用API时,调用了subscription方法的错误处理程序。
前端代码:
this.httpClient.get<string>(`${this.baseUrl}/account/getname`).subscribe(
(accountName)=> console.log(accountName),
() => console.log("Failure")
);
控制器中的后端代码:
[HttpGet]
public string GetName()
{
return "Sample Account Name";
}
前端代码会将“ Failure
”登录到控制台。
如果从subscribe()
中删除了错误通知方法,则会发生以下错误
未捕获的TypeError:无法读取的属性'ngOriginalError' 在getOriginalError上未定义
答案 0 :(得分:1)
未捕获到的TypeError:无法读取getOriginalError处未定义的属性'ngOriginalError'
之所以发生这种情况,是因为来自服务器端的响应是一个错误,并且没有错误处理程序。我想,通过HttpClient
发出http请求时,解决方案始终是处理错误:
import { catchError } from 'rxjs/operators';
makeHttpRequest(url): Observable<any> {
return this.httpClient.get(url)
.pipe(
catchError(err => console.log(err))
);
}
makeHttpRequest(`${this.baseUrl}/account/getname`).subscribe(
(accountName) => console.log(accountName);
);
答案 1 :(得分:0)
由于HttpClient的默认响应类型为 JSON ,因此它期望响应对象为json值。
但是我们的答复是字符串。 这就是错误的原因。
当API返回非JSON数据时,我们需要在responseType
请求中使用get
选项进行指定。
有不同的选项,例如'blob
','text
','arraybuffer
','json
'
对于上述情况,如果我们不将get调用的类型参数指定为字符串(get<string>
,则只需将responseType设置为{responseType : 'text'}
return this.httpClient.get(`${this.baseUrl}/account/getname`,
{responseType : 'text' }).subscribe(
(data)=> console.log(data),
() => console.log("Failure")
);
但是如果我们将get调用的类型参数指定为字符串,则会出现错误
类型'“ text”'不能分配给类型'“ json”'
为避免这种情况,我们需要将requestType
选项修改为{responseType : 'text' as 'json'}
return this.httpClient.get<string>(`${this.baseUrl}/account/getname`,
{responseType : 'text' as 'json'}).subscribe(
(data)=> console.log(data),
() => console.log("Failure")
);
答案 2 :(得分:0)
请检查您的http方法(post / get / put)中的响应类型,因为默认情况下它是json类型,但是有时您的响应中包含斑点或文本,则会发生这种类型的错误。
responseType ?:角形库中的'arraybuffer'|'blob'|'json'|'text'