4

より複雑なシナリオを試した後、解決策がなければ基本に戻ります。

エラー 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')
        );
    }
}
4

2 に答える 2