より複雑なシナリオを試した後、解決策がなければ基本に戻ります。
エラー 500 を返すときに、クライアントにそれをキャッチしてもらいたい Web API コントローラーがあります。
なんらかの理由で-これは起こっていません-おそらくここで何かが欠けています。
コントローラーが通常の状態にあるとき、メカニズムは完全に機能します。
このコードをコンソールで実行すると、エラー 500 メッセージと、「ストリームが期待される場所に無効なオブジェクトを提供しました...」というエラーとエラーが表示されます。
ここで何が欠けていますか?
これは私のコードです(コピー+貼り付けではなく、手書きで書かれています-タイプミスを無視してください):
意図的に例外を返すコントローラー:
public IActionResult getSomeErrorAsTest()
{
try
{
/*usually it does something on the server*/
throw new Exception("Serer error");
}
catch(Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, new List<string>());
//throw ex;
}
}
Angular サービス:
export class MyService
{
getData()
{
return this.httpClient.get<void>(<controller url>)
/*not sure if this part is needed*/
.pipe
(
catchError(this.handleError);
)
}
handleError(error : HttpErrorResponse)
{
return Observable.throw(error.message || "server error");
}
}
消費コンポーネント:
export class myComponent
{
isGettingData : boolean;
constructor (private mySrv : MyService)
ngOnInit()
{
this.isGettingData = false;
}
public getData()
{
this.isGettingData = true; //This is used for indication icon in the Html, in case the server action takes few seconds
this.mySrv.getDataFromBackEndServer().subscribe
(
result => this.isGettingData = false,
error => {
console.log('eror occured');
this.isGettingData = false;
},
() => console.log('completed')
);
}
}